什麼是立即執行函式???
宣告乙個函式,並馬上呼叫這個匿名函式就叫做立即執行函式;也可以說立即執行函式是一種語法,讓你的函式在定義以後立即執行;
立即執行函式的多個寫法:
有時,我們定義函式之後,立即呼叫該函式,這時不能在函式的定義後面直接加圓括號,這會產生語法錯誤。產生語法錯誤的原因是,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 函式宣告...