閉包問題 及js高程中閉包與變數例題解析

2021-07-29 19:40:00 字數 1085 閱讀 1824

閉包是js中的重點,也是乙個較難理解的乙個點,但是其應用卻很廣,故而理解並正確使用閉包是很有必要的。

定義:有權訪問另乙個函式作用域中的變數的函式。

如下,我想獲取 test 的值,即輸出test

function init() 

var result = test;

console.log(result);

輸出的結果是 not defined,是無法訪問函式內的變數,使用閉包的情況下

function init() 

}var result = init()();

console.log(result);

輸出的結果就是函式的區域性變數 test的值,[呼叫init時要兩個小括號對,第一對時立即執行init,此時返回的是乙個匿名函式,要立即執行這個匿名函式,需要加一對小括號,所以需要兩對小括號]

來看看下面的程式輸出

function func() 

}return result;

}var results = func();

results.foreach(function (element) );

result 最後輸出的是10個10,並不是儲存的0-9,這是由於result中儲存是的同乙個匿名函式的引用,而匿名函式就是閉包的表現形式,閉包中的變數是儲存的匿名函式外部的變數 i ,當我們去呼叫的時候,變數 i 的值已經增加到 10了 ,即儲存的是作用域鏈上的最終結果,所以想要實時輸出 i 變數的值,必須立即執行閉包匿名函式。

function func() (i)

}return result;

}var results = func();

results.foreach(function (element) );

此時輸出的就是0-9,可以對比兩個程式輸出的方式,第乙個是element(),第二個是element,由於第二個程式中,匿名函式立即執行了,result中存的是返回的num的值,而不是匿名函式的應用了。

當然書上用這個例子,想說明的是閉包中的變數儲存的是其作用域鏈上的終值。

閉包與變數

js高程中關於閉包與變數這一節,講到乙個案例,我當時看的一臉懵逼,然後就自習的研究了一下,先上 function createfunctions return result 呼叫最外層函式,接收返回的陣列 var arr createfunctions 迴圈遍歷陣列,呼叫每個元素並列印 for va...

閉包與變數

作用域鏈的這種配置機制引出了乙個值得注意的 即閉包只能取得包含函式中的任何變數的最後乙個值。別忘了閉包所儲存的時整個變數物件,而不是某個特殊的變數。下面這個例子可以清晰地說明這個問題 function createfunction return result 這個函式返回的函式陣列中,所有函式的內部...

閉包與變數

作用域鏈的這種配置機制引出了乙個值得注意的 即閉包只能取得包含函式中任何變數的最後乙個值。閉包所儲存的是整個變數物件,而不是某個特殊的變數。function createfunctions return result 上述函式會返回乙個函式陣列。表面上看,似乎每個函式都應該返回自己的索引值,即位置0...