国产探花免费观看_亚洲丰满少妇自慰呻吟_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變量的一個副本,因此就可以返回各自不同的數值了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尉犁县| 双峰县| 苏尼特右旗| 西充县| 乌鲁木齐市| 尖扎县| 浮山县| 咸宁市| 惠水县| 龙门县| 古蔺县| 新和县| 合川市| 长宁县| 慈利县| 永定县| 博乐市| 都昌县| 温宿县| 镶黄旗| 水城县| 班戈县| 黔南| 二连浩特市| 犍为县| 巴青县| 远安县| 于都县| 儋州市| 东莞市| 郧西县| 枞阳县| 荃湾区| 金乡县| 吉安县| 泸溪县| 桂平市| 个旧市| 新田县| 新巴尔虎右旗| 金昌市|