閉包與立即執行函式理解與區別

2021-10-05 03:30:28 字數 1230 閱讀 5068

內部函式被外部函式以外的變數引用時,就形成了乙個閉包

function

outter()

}var a =

outter()

a()//內部函式inner被外部函式outter以外的變數a引用

閉包是函式內部和外部聯絡起來的橋梁。這樣函式外部就可以讀取函式內部的變數,讓這些變數的值一直儲存在記憶體中。

但凡是當前活動物件中有被內部子集引用的資料,那麼這個時候,這個資料不刪除,保留一根指標給內部活動物件。

**理解引自

和閉包沒什麼關係卻總放在一起使用。

函式宣告

規則:必須指定乙個函式名字

foo()

;function

foo(

)//由於函式宣告會被提公升,所以呼叫函式可以在之前或之後呼叫

函式表示式

規則:將函式賦值給乙個變數

var

foo=

function()

foo(

)//由於函式表示式,只會對變數foo進行提公升,只有執行到**處,才會對變數foo進行賦值,所以呼叫函式必須在函式表示式之後

立即執行函式

常用的兩種方式

(

function()

)();

(function()

())

立即執行函式的演變

1:在函式表示式後加括號,可以立即執行函式

var

foo=

function()

();

2:在匿名函式後加括號,不可以立即執行函式

function()

();

在函式表示式後加括號可以立即執行函式,但如果不把匿名函式賦值給變數,而直接在後邊加乙個括號,則會報語法錯誤。因為當js引擎在遇到function時,會預設把它當作是函式宣告,所以必須要有乙個函式名

3:在函式宣告後加括號,不可以立即執行函式

function

foo()(

)

如果給匿名函式新增乙個函式名,也就變成了函式宣告,然後在函式宣告後加括號,也會報語法錯誤,因為函式宣告會被提公升,當提公升後就相當於在**中只寫了一對括號,而這個括號和前面的函式宣告又沒什麼關係,所以語法報錯

理解閉包和立即執行函式

理解閉包和立即執行函式 1.閉包 function count i 5 count 1 var c1 count 變數i在函式呼叫完一次就被銷毀 c1 1 c1 1 如何實現乙個簡單的計時器,採用閉包 function count2 var c2 count2 c2 1 c2 2 c2 3 var ...

對自執行函式與閉包的理解

對自執行函式與閉包的理解 function 推薦使用這個 function 但是這個也是可以用的 由於括弧 和js的 異或,逗號等操作符是在函式表示式和函式宣告上消除歧義的 所以一旦解析器知道其中乙個已經是表示式了,其它的也都預設為表示式了 說白的,下邊這三行,因為有了 他們後邊的式子不會再報錯了,...

js高階篇 閉包和立即執行函式

先上一段 function formatter value,row,index type post datatype json success function success data else if data.status 0 else if data.code 0 error function...