国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js中的閉包學習心得

2024-05-06 15:22:07
字體:
來源:轉載
供稿:網友

閉包

按中文的意思就是關上一個包的意思。如果我們把函數的作用域當做是一個包的話,那這個詞很形象體現了它的作用 。函數的正常的執行流程是當函數中的語句執行完后,程序會自動銷毀這個函數的作用域,但是當一個函數中聲明了另一個函數,并且這個子函數執行時存在引用父函數的變量,就會形成閉包,形象點說就相當于把父函數的作用域給關閉了起來,不讓程序去銷毀它。

例如:

function a() {  var name = "xuxu";  function b() {    console.log(name);  }  // 此處產生閉包   b();} a();

當函數可以記住并訪問它所在的作用域鏈時,就產生了閉包 當然,大部分的閉包都不是這么直觀的,因為子函數的調用是可以在父函數之外的,例如:

function a() {  var name = "xuxu";  function b() {    console.log(name);  }  return b;} var c=a();// 此處產生閉包 此處的c函數其實就是a函數c();

通過以上代碼,我們也可以看出一個閉包的好處,就是我們再全局作用域(此處是widow)下訪問到了局部作用域(a函數)的作用域的值,按正常的詞法作用域是無法這么做的,但是當我們使用閉包是就可以了。然后我們再看一點我們平時寫的比較多的:

function foo() {  var a = 2;  function baz() {     // 2    console.log( a );   }  bar( baz );}function bar(fn) {// 大家快看呀,這就是閉包!  fn(); }

又或者

var fn;function foo() {  var a = 2;  function baz() {    console.log( a );  }  // 將baz分配給全局變量  fn = baz; }function bar() {   // 大家快看呀,這就是閉包!  fn();}foo();// 2bar(); 

以上也是閉包,因此在函數內部調用子函數,或者通過何種手段將內部函數傳遞到所在的詞法作用域以外,它都會持有對原始定義作用域的引用,無論在何處執行這個函數都會使用閉包。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 襄垣县| 吉木乃县| 辽阳市| 山西省| 麟游县| 彩票| 宕昌县| 手机| 松滋市| 阿坝| 九江县| 连州市| 三江| 霍林郭勒市| 太原市| 德安县| 佳木斯市| 大理市| 红桥区| 乌苏市| 北辰区| 老河口市| 偏关县| 成武县| 淳化县| 太湖县| 呈贡县| 湖南省| 泾川县| 北票市| 枞阳县| 鄂尔多斯市| 鄂托克前旗| 尼木县| 龙江县| 盘锦市| 大关县| 荃湾区| 宜章县| 永平县| 台安县|