(轉)js——自執行函數

5.1對於函數表達式,在後面加括號即可以讓函數立即執行;例如下面這個函數,至於爲什麼加了括號就可以立即執行,我們可以這麼理解,就是像fn1();這樣寫的話,函數 可以立即執行是沒問題的,我們在經常會用到,那麼對於函數表達式來說,fn1就是對後面的匿名函數的一個引用,因此在後面的匿名函數後直接加括號,自然也就可以立即執行

 

 

函數表達式立即執行

5.2但是對於下面這個函數,如果直接加()就會報錯;如果按照上面的思路去理解,在匿名函數後面直接加上()應該是可以立即執行的,但是下面這個函數之所以會報錯,而且會報兩個錯誤,是因爲js引擎在解析js代碼的時候,遇到以function打頭的函數會當做函數聲明,然後會檢查語法錯誤,那麼第一個括號處的語法錯誤在於函數聲明是必須要有函數名字的,而()前面沒有所以報錯;第二個括號處的語法錯誤在於函數聲明到第二個花括號處,就已經算是結尾了,後面的()會被當作分組操作符,這個()實際上已經和函數聲明沒關係了,但是既然有了分組操作符,那就要有表達式,不然會報錯;

 

函數聲明想要立即執行,會報錯

按照上面的分析,我們如果在第一個()前面加上函數名稱,在第二個()裏面加入表達式,那麼就不會報錯了,我們來看一下效果

 

 

改掉語法錯誤以後的函數聲明

可以看到修改了那兩處的問題以後,報錯消失了,但是這個時候函數並沒有執行,原因上面也已經提到了,就是一旦被當作函數聲明,那麼到花括號處就算爲止了,後面的()就只當作一個分組操作符,和函數沒有任何關係了

5.3那麼想讓這種匿名函數直接執行應該怎麼辦呢,其實很簡單,就是在function前面加上一些操作符,這樣js引擎在解析的時候就不會把它當成是函數聲明瞭

 

推薦使用的方法,看起來比較具有結構性

 

也是一種常用的寫法

 

 

轉載:https://www.cnblogs.com/kinblog/p/11261645.html

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