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

首頁 > 網站 > WEB開發 > 正文

閉包與變量

2024-04-27 15:12:14
字體:
來源:轉載
供稿:網友

閉包:有權訪問另一個函數作用域中的變量的函數

閉包只能取得包含函數中任何變量的最后一個值。閉包保存的是整個變量對象,而不是某個特殊的變量,下面這個例子可以清楚的說明這個問題。

function createFunctions(){ var result = new Array(); for(var i=0; i<10;i++){ result[i]=function(){ return i; }; } return result; }

這個函數會返回一個函數數組,從表面看每個函數都應該返回自己的索引值,即位置0的函數返回0,位置1的函數返回1,但實際上,每個函數都返回10。因為每個函數的作用域鏈中都保存著createFunctions()函數的活動對象,所以它們的引用的都是同一個變量i。當createFunctions()函數返回后,變量i的值是10,此時每個函數都引用著保存變量i的同一個變量對象,所以每個函數內部i的值都是10。 我們可以通過創建一個匿名函數強制讓閉包行為符合預期。

function createFunction(){ var result = new Array(); for(var i=0; i<10;i++){ result[i]=function(num){ return function(){ return i; }; }(i); } return result; }

在這個函數中,我們沒有直接閉包復制,而是定義了一個匿名函數,并將立即執行該匿名函數的結果賦值給數組。這里的匿名函數有一個參數num,也是最終函數要返回的值。在調用匿名函數時,我們傳入了變量i,由于函數參數是按值傳遞的,所以就會將變量i的當前值復制給num,而這個匿名函數內部,又創建并返回了一個訪問num的閉包。 這樣一來,result數組中的每個函數都有自己的num變量的一個副本,因此就可以返回各自不同的數值了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 溧水县| 合水县| 琼海市| 汉阴县| 三门峡市| 汝阳县| 墨脱县| 新化县| 临澧县| 乐平市| 民勤县| 信丰县| 兴业县| 突泉县| 罗源县| 齐河县| 吴川市| 杭州市| 漳浦县| 高尔夫| 永平县| 惠来县| 关岭| 都江堰市| 象州县| 望都县| 监利县| 观塘区| 于都县| 驻马店市| 洛扎县| 无锡市| 泰和县| 章丘市| 夏邑县| 三门县| 西贡区| 郎溪县| 紫阳县| 修水县| 岳阳市|