麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

js閉包學習心得總結

2019-11-19 14:01:21
字體:
來源:轉載
供稿:網友

首先引用來自官網文檔的定義:

closure is the combination of a function and the lexical environment within which that function was declared.

閉包是一個函數和其內部公開變量的環境的集合.

簡單而言, 閉包 = 函數 + 環境

第一個閉包的例子

function init() { var name = 'Mozilla'; // name is a local variable created by init function displayName() { // displayName() is the inner function, a closure alert(name); // use variable declared in the parent function  } displayName(); }init();because inner functions have access to the variables of outer functions, displayName() can access the variable name declared in the parent function, init().

其實這個栗子很簡單,displayName()就是init()內部的閉包函數,而為啥在displayName內部可以調用到外部定義的變量 name 呢,因為js內部函數有獲取外部函數中變量的權限。

第二個例子

var data = [ {'key':0}, {'key':1}, {'key':2}];function showKey() { for(var i=0;i<data.length;i++) {   setTimeout(function(){    //console.log(i); //發現i輸出了3次3   //console.log(this); // 發現 this 指向的是 Window   data[i].key = data[i].key + 10;   console.log(data[i].key)   }, 1000); }}showKey();

上面這個例子可以正確輸出 10 11 12 嗎?

答案是:并不能,并且還會報語法錯誤....

console.log(i); 發現i輸出了3次3,也就是說,在setTimeout 1000毫秒之后,執行閉包函數的時候,for循環已經執行結束了,i是固定值,并沒有實現我們期望的效果。

console.log(this); 發現 this 指向的是 Window,也就是說,在函數內部實現的閉包函數已經被轉變成了全局函數,存儲到了內存中。

所以需要再定義一個執行函數

var data = [ {'key':0}, {'key':1}, {'key':2}];function showKey() { var f1 = function(n){  data[i].key = data[i].key + 10;  console.log(data[i].key) } for(var i=0;i<data.length;i++) {   setTimeout(f1(i), 1000); }}showKey();// 得到預期的 10 11 12

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品久久久久久久久久久久久久久久久久久 | 久草在线观看资源 | 羞羞网站入口 | 美女毛片在线观看 | 午夜视频免费播放 | 亚洲精中文字幕二区三区 | 国产精品区一区二区三区 | 国产毛片自拍 | 爱逼爱操综合网 | 中国性xxx | 午夜精品在线视频 | 成人午夜视频免费看 | 亚洲成人福利电影 | 毛片av网| 激情大乳女做爰办公室韩国 | 欧美精品一区二区久久 | 国av在线 | 小视频免费在线观看 | 国产羞羞视频在线观看免费应用 | www.777含羞草 | 黄色免费在线电影 | 一级毛片免费大片 | 精品国产一区二区三区久久久蜜月 | 日韩欧美精品电影 | 亚洲成人免费网站 | 国产精品久久久久久久四虎电影 | 免费在线观看成年人视频 | 色骚综合| 宅男噜噜噜66一区二区 | 一及毛片视频 | 大学生一级毛片 | 国产免费视频在线 | 天天色综合6 | 亚洲最大久久 | 国产成人精品免费视频大全办公室 | 国产精品久久久久久久亚洲按摩 | 久久精片 | 久久亚洲网 | 久久免费视频精品 | 欧美18videos性处按摩 | 中文字幕一区在线观看视频 |