成人免费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技術棧公眾號

主站蜘蛛池模板: 91精品久久久久久久久99蜜臂 | 欧美日本一区二区 | 自拍偷拍亚洲一区 | 一区在线播放 | 国产小视频自拍 | 黄色a级一级片 | 国产精品成人在线 | 伊人一区 | 亚洲欧美日韩精品久久亚洲区 | 天天操天天玩 | 91精品国产一区二区在线观看 | 国产91久久精品一区二区 | 中文字幕在线播放第一页 | 欧洲免费视频 | 中文字幕亚洲一区二区va在线 | 国产高清在线 | av黄色在线 | 夜夜爽99久久国产综合精品女不卡 | 欧美aaa级 | 欧美看片 | 91在线最新 | 久久99精品久久久久久国产越南 | 亚洲精品三级 | 中文字幕亚洲区一区二 | 精品一区二区视频 | 亚洲成人第一页 | 国产成人精品一区二区三区在线 | 欧美自拍第一页 | 红桃成人在线 | 亚洲成人一区二区三区 | 在线精品国产 | 国产精品美女久久久久久久网站 | 欧美视频免费在线观看 | 中文av电影| 日本天堂视频在线观看 | 羞羞色网站 | 亚洲天堂中文字幕 | 国产96在线| 亚洲精品永久免费 | 婷婷精品| 日韩精品一区二区三区免费视频 |