在我幼稚的概念,一個封閉僅僅是由另一個函數,它保留了外部函數的範圍內,返回後函數返回:創建封閉的條件是什麼?
var factory = function(y){
var x = 2;
return function(){
console.log(x+y);
}
}
var closure1 = factory(2);
closure1(); // output 4
var closure2 = factory(10);
closure1(); // output 4
closure2(); // output 12
雖然我不明白爲什麼加入循環中的事件處理程序將創建閉包? (如MDN所示)事件處理程序沒有明確返回,這不是此問題的關注點。
然後,我遇到了另一個page,並在約代碼片斷2:,故稱
的onclick功能將創建一個閉合,如果它引用在其範圍內的變量,但它沒有。
這是否意味着,在循環
nodes[i].onclick = function() { return false; };
不是倒閉
但如果我把它改爲
nodes[i].onclick = function() { console.log(i); return false; };
然後它變成封閉?
結合部分的上方,我的概念來創建一個閉合是
- 它需要一個函數在另一個函數返回的,或其中連接在另一個函數的回調函數
- 內函數必須莫名其妙地訪問外部函數的範圍
是否真的,如果創建閉包iff 1 & 2滿意嗎?