-2
我正在閱讀一些代碼,並遇到此問題。爲什麼變量等於一個返回函數的匿名函數?
var myvar = (function(){
return function() {
// code here
}
})();
我有點困惑,爲什麼它是這樣寫的。它似乎被命名,匿名和自我執行。這怎麼能寫得更乾淨?
我正在閱讀一些代碼,並遇到此問題。爲什麼變量等於一個返回函數的匿名函數?
var myvar = (function(){
return function() {
// code here
}
})();
我有點困惑,爲什麼它是這樣寫的。它似乎被命名,匿名和自我執行。這怎麼能寫得更乾淨?
在Javascript中,var
是函數作用域或全局作用域。有時你需要塊範圍。在ES6之前,function(){}()
是模擬塊範圍的唯一方法。 (ES6介紹let
和const
。)
例如,
var callbacks = [];
for (var i = 0; i < 10; i++) {
var callback = (function() {
var index = i;
return function() {
console.log('i = ' + i);
console.log('index = ' + index);
};
})();
callbacks.push(callback);
}
隨着function(){}()
包裝,所有的回調有自己index
變量。 i
在包裝外部並且被共享。如果我們要調用callbacks[5]()
,它會記錄
i = 10
index = 5
的function(){}()
結構有時被稱爲「立即調用的函數表達式」,或「IIFE」的簡稱。
變量'myvar'結束爲從外部函數返回的那個函數的引用。這是一個常見的成語。外部函數可以聲明和初始化返回函數使用的變量。 – Pointy
看看http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – Derek