成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

幫你精通JavaScript:什么是閉包?

開發 前端
Closure閉包是編程語言Lexical Scoping的專有屬性,區別于dynamic scoping。即函數執行調用的是其在定義過程中的”變量定義域“,而非其在調用時候的變量定義域。

[[375624]]

 一 、詞法定義域 Lexical

Closure閉包是編程語言Lexical Scoping的專有屬性,區別于dynamic scoping。即函數執行調用的是其在定義過程中的”變量定義域“,而非其在調用時候的變量定義域。

Javascript的函數的初始狀態不僅包括函數本體而且包括函數定義過程所在的定義域。

  • Like most modern programming languages, JavaScript uses lexical scoping. This means that functions are executed using the variable scope that was in effect when they were defined, not the variable scope that is in effect when they are invoked. In order to implement lexical scoping, the internal state of a JavaScript function object must include not only the code of the function but also a reference to the scope in which the function definition appears. This combination of a function object and a scope (a set of variable bindings) in which the function’s variables are resolved is called a closure in the computer science literature.

看下面的例子:

  1. function makeCounter () { 
  2.     let counter = 0; 
  3.     return function() {return counter++;}; 
  4. let counter = makeCounter(); 
  5. console.log(counter()); 
  6. console.log(counter()); 
  7. console.log(counter()); 
  8.  
  9. #+RESULTS: 
  10. : 0 
  11. : 1 
  12. : 2 

 對這個嵌套函數而言,最有意思的一點是:當外部函數被調用返回后(這里是makeCounter()), 再也沒有任何手段能夠觸及到 counter 這個變量。只有內嵌函數擁有專屬權限抵達該變量。

二、Closure的標準定義

開發者通常應該都知道“閉包”這個通用的編程術語。

閉包 是指內部函數總是可以訪問其所在的外部函數中聲明的變量和參數,即使在其外部函數被返回(壽命終結)了之后。在某些編程語言中,這是不可能的,或者應該以特殊的方式編寫函數來實現。但是如上所述,在 JavaScript 中,所有函數都是天生閉包的(只有一個例外,將在 "new Function" 語法 中講到)。

也就是說:JavaScript 中的函數會自動通過隱藏的 [[Environment]] 屬性記住創建它們的位置,所以它們都可以訪問外部變量。

在面試時,前端開發者通常會被問到“什么是閉包?”,正確的回答應該是閉包的定義,并解釋清楚為什么 JavaScript 中的所有函數都是閉包的,以及可能的關于 [[Environment]] 屬性和詞法環境原理的技術細節。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2019-11-07 21:51:18

閉包前端函數

2019-07-09 10:43:57

JavaScriptWeb前端

2021-02-21 16:21:19

JavaScript閉包前端

2021-04-01 10:16:01

EmacsJavaScript elisp

2020-10-14 15:15:28

JavaScript(

2011-05-25 14:48:33

Javascript閉包

2011-08-03 08:59:46

JavaScript

2017-09-14 13:55:57

JavaScript

2016-09-14 09:20:05

JavaScript閉包Web

2009-07-24 17:30:37

Javascript閉

2012-11-29 10:09:23

Javascript閉包

2010-06-23 10:24:42

Javascript閉

2017-05-22 16:08:30

前端開發javascript閉包

2016-09-18 20:53:16

JavaScript閉包前端

2009-03-17 15:36:29

JavaScript循環事件

2021-03-06 09:18:51

JS閉包函數

2011-03-02 12:33:00

JavaScript

2011-05-12 18:26:08

Javascript作用域

2011-05-30 14:41:09

Javascript閉

2022-09-02 17:26:18

Golang閉包
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久国产精品免费免费 | 精品免费 | 日本在线观看视频 | 一二三四av | 综合激情久久 | 福利二区 | 国产在线播放一区二区三区 | 久久99网| 亚洲视频国产 | 欧美视频第二页 | 精品一区二区不卡 | 欧美大片在线观看 | 精品国产乱码久久久久久丨区2区 | 成人啊啊啊 | 呦呦在线视频 | 欧美 日本 国产 | 精品欧美视频 | 成人免费看黄网站在线观看 | 日韩视频在线观看中文字幕 | 婷婷综合网 | 女同久久另类99精品国产 | 久草精品在线 | 91亚洲精选| 黄色一级电影在线观看 | 国产激情视频在线观看 | 欧美日韩视频在线 | 久久精品亚洲精品国产欧美kt∨ | 久久精品一区 | 国产乱精品一区二区三区 | 中文字幕一区二区三区在线观看 | 免费黄色av | 国产男女猛烈无遮掩视频免费网站 | 国产精品片| 中文字幕国产第一页 | 亚洲一区在线免费观看 | 国产欧美三区 | 亚洲欧美中文字幕在线观看 | 日本久久久久久 | 日韩福利一区 | 久久久久久蜜桃一区二区 | 日本小电影网站 |