目錄
推導 :
引言:
學過js的朋友們應該都知道立即執行函數,當只需要函數執行一次就行了,以後都不會執行,爲了避免函數佔用空間,就用立即執行函數,讓他執行完一次後就自動銷燬吧。
爲什麼立即執行函數是這種格式的寫法?
下面是倆種寫法,是不是都知道這麼寫,但是不知道爲什麼可以這麼寫,背就完事了?那還只停留在表面,不懂原理是沒法做噁心的筆試題的,其實不一定只有倆種寫法的,下面一步步的推導 ,看完你一定能明白,wc 原來如此啊
(function() {
console.log("寫法一");
})();
(function() {
console.log("寫法二");
}())
推導
一:
首先要知道倆句話: 只有函數表達式才能被執行符號執行。被執行符號執行完,函數名字就被放棄了,沒名了。
執行符號就是(),不太懂,沒事,看例子就懂
function test() {
console.log("執行");
}() // 是函數聲明,執行不了,報錯
*****************************************
function test() {
console.log("執行");
}
test() // test是表達式,可以被執行符號執行
*****************************************
var test = function() {
console.log("執行");
}(); //函數表達式,也是表達式,可以被執行符號執行
console.log(test); //undefined
*****************************************
二:
既然表達式纔可以被立即執行符號執行 那對第一個例子更改下,讓他變爲表達式。就可以正常運行了
在前面添加正號 +,-, !等都可以轉變爲表達式 騷不騷,說不定就是筆試題哦
+ function test() {
console.log("執行");//執行
}();
console.log(test); //ReferenceError: test is not defined 名字沒了
三 :
既然你+可以轉,那我() 算不算運算符,那也是同樣道理可以的呀 那就把+換成。
既然一被執行符號執行名字都沒了,那乾脆名字我也不寫了,寫了也白寫,那簡化不就得到最後我們常用的形式了嗎?
(function() {
console.log("寫法一");
})();
(function() {
console.log("寫法二");
}())
最後:
看完了 還覺了立即執行函數就倆種寫法嗎? 你要是想sao 什麼加+,-,!,|| 都是可以的啊,主要是,以後碰到這種噁心的題目,別被唬到了
+ function test() {
console.log("執行");//執行
}();
console.log(test); //ReferenceError: test is not defined 名字沒了