曾被人問起,立即執行函數是什么函數?他的回答是:閉包;我左思右想,又重新翻了一遍書,百度了一遍各種閉包的解釋。最后 我還是堅持我的理解:立即執行函數並不是閉包,只是實現了閉包中的變量私有化功能。
書上給閉包的定義如下:有權訪問另一個作用域中的變量的函數。 所以單從閉包的定義來講,自執行函數是不符合這一定義的,自執行函數是一個封閉的函數,無法訪問外部變量。
舉個最簡單的閉包的栗子:
function foo(){
var a = “變量“;
return function(){
console.log(a)
}
}
調用foo()() //打印結果:變量
上面foo函數里返回了一個匿名函數,匿名函數可以訪問到foo函數里的a變量,所以 這個匿名函數就是個閉包。在本質上,閉包是將函數內部和函數外部連接起來的橋梁。;
舉個最簡單的立即執行函數的栗子:
(function(){
alert('123)
}())//無法直接訪問其他函數內部的變量,只能通過傳參訪問外部變量;