立即執行函式是什麼

2021-10-23 09:14:27 字數 1681 閱讀 8370

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

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

立即執行函式的多個寫法:

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

//語句

functionfn(

);//表示式

varfn

=function()

;

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

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

(

function()

())(

function()

)()

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

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

(

function()

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

(function()

)()//用括號把函式包起來

!function()

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

+function()

()-function()

()~function()

()void

function()

()newfunction()

()

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

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

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

封裝變數

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

0<

/li>

1<

/li>

2<

/li>

3<

/li>

4<

/li>

5<

/li>

6<

/li>

7<

/li>

8<

/li>

9<

/li>

<

/ul>

var lis = document.

getelementsbytagname

("li");

for(

var i =

0;i < lis.length;i++)}

)(i)

}<

/script>

立即執行函式建立了乙個新的函式作用域,相當於建立了乙個「私有」的命名空間,該命名空間的變數和方法,不會破壞汙染全域性的命名空間。此時若是想訪問全域性物件,在函式中this指向永遠指向window

立即執行函式

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

立即執行函式

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

立即執行函式

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