- testClosure被調用名爲函數接受兩個參數,並返回一個匿名函數,並設置T1是一個匿名函數。
t1現在是一個匿名函數,可以調用並接受一個參數。當調用t1時,它將從名稱函數和匿名函數構建您的字符串參數參數並返回結果。
當您調用命名函數testClosure時,它會創建一個閉包。當您調用匿名函數時,它可以訪問所附的名稱函數字符串params,並將所有3個參數作爲內置字符串返回。
JS中的閉包是JavaScript提供的最強大的實現之一。學習如何以及在何處實施或需要關閉的位置是通過一段時間的嬰兒步驟學習的。
你的JavaScript庫越大,你會發現自己需要關閉的越多。
閉包允許您將某個特定的數據放到其他上下文無法訪問的上下文中,並且我發現自己在其他環境中使用它們的次數更多。
匿名函數和閉包大部分時間都在一起工作。學習閉包的最好方法是保持每天關於閉包的一點一滴學習,當時間到了,當你發現自己處於需要閉包的情況時,你會最終得到它。
下面是一個例子,我正在對遠程服務器上的相冊進行AJAX調用。 AJAX調用的成功功能包含專輯的一組照片。對於每個循環,我調用一個名稱函數,它將返回一個匿名函數。匿名函數被設置爲按鈕單擊事件。
每個添加到DOM的新按鈕都可以訪問它自己的封閉網址字符串參數。
學習和理解閉包是一個好的JavaScript程序員至關重要。
function testClosure(url) {
return function (ev) {
document.getElementById('myImg').url = url || 'http://www.dummyurl/dummy.png';
}
}
$.ajax({
type: "post",
url: "http://www.myurl.com",
data: 'photoalbum' = 45,
dataType: "json",
success: function (photos) {
for (var i = 0; i < photos.length; i++) {
var btn = document.createElement('input');
btn.type = 'button';
btn.onclick = testClosure(photos[i].url);
document.body.appendChild(btn);
};
}
});
你試過了嗎? –
#2聽起來不對 - t1不返回函數,t1是一個匿名函數,它在調用時返回一個字符串。 – goat
@Ed治癒對不起,但你是什麼意思? – enix