[英]How private function created with closure can access variable defined in constructor?
[英]how does closure help a function to knowing the previous function call's private variable
我試圖了解關閉,我認為我理解它,直到我遇到以下解決方案:
我不明白這將如何提醒0,1,2,3,4,5
var next = (function(){
var r = 0;
return function(){
return r++;
}
})()
for (var i = 0; i<=5; i++){
alert(next());
}
我理解第一次迭代是如何工作的,只有next
,函數將執行並返回return函數,然后next ()
接下來將執行返回的函數。 我也明白,執行時返回函數會因為Closure而訪問變量r。
但是我不明白在下一次迭代中,r的狀態會持續存在。 在next()
再次運行的下一次迭代中, r
變量將在函數范圍內並且不會受到全局中任何事物的影響,它如何知道前next()
中的r的狀態next()
。 即使是這樣,也不會var r = 0
復位r
回0?
外部IIFE僅運行一次 ,如末尾的()
:
var next = (function(){
var r = 0;
return function(){
return r++;
}
})()
^^
因此,當解釋器遇到var next = ...
行時,IIFE運行,創建r
變量,然后返回以下函數:
function(){
return r++;
}
next
被分配給調用IIFE的結果,IIFE返回該函數。 因此,在將來,當你調用next
,你正在調用上面的那個(小)函數 - 調用next
不再調用整個IIFE,並且只有一個綁定r
變量。
next
是一個創建了r
的uninv熏制函數,你是對的,每次調用next
都會創建一個帶有r
的新綁定的新函數:
var next = function(){ var r = 0; return function(){ return r++; } } for (var i = 0; i<=5; i++){ var theFn = next(); console.log(theFn()); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.