立即執行函數寫法的原理

目錄

引言:

爲什麼立即執行函數是這種格式的寫法?

推導 

一:

二:

三 :

最後:


引言

學過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 名字沒了

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章