立即執行函式

2022-08-17 23:57:13 字數 1686 閱讀 4605

一:什麼是立即執行函式?

宣告乙個函式,並馬上呼叫這個匿名函式就叫做立即執行函式;也可以說立即執行函式是一種語法,讓你的函式在定義以後立即執行;

//

(function (){}()) w3c標準

//(function (){})()

//只有表示式才被執行符號執行

//+ function ()(); 立即執行函式的方法還有一些

(function

()())

//我的理解就是 :

立即執行函式後函式被清除

二:立即執行函式的寫法:

有時,我們定義函式之後,立即呼叫該函式,這時不能在函式的定義後面直接加圓括號,這會產生語法錯誤。產生語法錯誤的原因是,function 這個關鍵字,既可以當做語句,也可以當做表示式,比如下邊:

//語句

function fn() {};

//表示式

var fn = function (){};

為了避免解析上的歧義,js引擎規定,如果function出現在行首,一律解析成語句。因此js引擎看到行首是function關鍵字以後,認為這一段都是函式定義,不應該以原括號結尾,所以就報錯了。

解決方法就是不要讓function出現在行首,讓js引擎將其理解為乙個表示式,最簡單的處理就是將其放在乙個圓括號裡,比如下邊

(function

()())

(function

())()

上邊的兩種寫法,都是以圓括號開頭,引擎會意味後面跟的是表示式,而不是乙個函式定義語句,所以就避免了錯誤,這就叫做"立即呼叫的函式表示式"。

立即執行函式,還有一些其他的寫法(加一些小東西,不讓解析成語句就可以),比如下邊:

(function () ())   //

用括號把整個表示式包起來

(function () )() //

用括號把函式包起來

!function () () //

求反,我們不在意值是多少,只想通過語法檢查

+function () ()

-function () ()

~function () ()

void

function () ()

newfunction () ()

三:立即執行函式的作用:

不必為函式命名,避免了汙染全域性變數

立即執行函式內部形成了乙個單獨的作用域,可以封裝一些外部無法讀取的私有變數

封裝變數

總而言之:立即執行函式會形成乙個單獨的作用域,我們可以封裝一些臨時變數或者區域性變數,避免汙染全域性變數

為什麼alert總是3? 因為i是貫穿整個作用域的,而不是給每乙個li分配乙個i,點選事件使非同步,使用者一定是在for執行完了以後,才點選,此時i已經變成3了。

那麼怎麼解決這個問題呢,可以用立即執行函式,給每個li建立乙個獨立的作用域,在立即執行函式執行的時候,i的值從0到2,對應三個立即執行函式,這3個立即執行函式裡邊的j分別是0,1,2所以就能正常輸出了,看下邊例子:

未完待更...

立即執行函式

函式宣告 函式表示式 匿名函式 函式宣告 function fnname 使用function關鍵字宣告乙個函式,再指定乙個函式名,叫函式宣告。函式表示式 var fnname function 使用function關鍵字宣告乙個函式,但未給函式命名,最後將匿名函式賦予乙個變數,叫函式表示式,這是最...

立即執行函式

一 立即執行函式 立即執行函式,顧名思義,就是能立即執行的函式 一般的,函式的執行都遵循著先宣告,後呼叫的原則,無論是函式表示式還是函式宣告 1 函式宣告 宣告 function sayhello 呼叫 sayhello hello 2 函式表示式 宣告 var sayhello function ...

立即執行函式

針對初始化功能的函式 好處 執行一次之後就銷毀,不占用空間,立即執行函式依然可以有返回值 基本形式 function 建議使用這種寫法 function 數學符號優先順序比較高,第一種方法的原因就是這樣,會先執行裡面的 括號的優先順序比較低 只有表示式才能被執行 function test 函式宣告...