對匿名函式的深入理解(徹底版)

2022-04-08 21:11:20 字數 4509 閱讀 7895

從簡單的字面理解就是乙個沒有名字的函式,但是如果說它只是這樣簡單,那我也就沒有必要來說這些。

對匿名函式的理解1:

function()

// 報錯

不能直接使用。

對匿名函式的理解2:

var a = function()

a(); //1

匿名函式可以依附於乙個變數,並且這個變數名就是這個匿名函式的名字。

var a = function()

console.log(typeof a); //function

對匿名函式的理解3:

window.onload = function()

// 匿名函式

當匿名函式用在繫結事件中的時候,當這個事件執行的時候這個匿名函式也會被執行。

對匿名函式的理解4:

(function())()

// 追夢子

如果將匿名函式放入到表示式中並且後面加上小括號會自動執行這個函式

對匿名函式的理解5:

var a = function()();

// 自執行函式

匿名函式後面加括號會執行這個函式。

對匿名函式的理解6:

function()();

// 報錯

匿名函式必須依附乙個變數。

對匿名函式的理解7:

var a = 

}a.fn(); //1

匿名函式不只是可以依附於乙個變數,也可以依附於乙個物件的屬性。

對匿名函式的理解8:

var a = ()

} //追夢子

同樣的匿名函式當做乙個物件的屬性時也可以自呼叫。

對匿名函式的理解9:

var a = function(b)

a(52); //52

匿名函式也可以傳遞引數

對匿名函式的理解10:

(function(a))(10) //10

對於表示式函式同樣也可以傳遞引數

對匿名函式的理解11:

var a = function(b)(10); //10

console.log(a); //undefined

如果將乙個自執行的匿名函式並且沒有返回值,賦值給乙個變數那麼這個變數的值就是undefined。因為這個函式在賦值之前已經執行完了,而這個函式沒有返回值,所以就是undefined,如果有返回值,那麼這個變數的值就是那個匿名函式的返回值。

var a = function(b)(10);

console.log(a); //10

這裡對匿名函式的講解就到此結束,下面說一下關於自執行的匿名函式問題。

why?為什麼下面這段**會報錯?

function()

// 報錯

1、因為ecamscript規定函式的宣告必須要有名字,如果沒有名字的話,我們就沒有辦法找到它了,對於為什麼自執行函式為什麼就可以不帶名字後面會講。

2、如果沒有名字必須要有乙個依附體,如:將這個匿名函式賦值給乙個變數。

如果按照上面的說法js報錯也是應該的,那麼我們用的下面這種**為什麼就能夠正常執行?

(function())() //1

之所以可以是因為我們將這個函式包含在了乙個小括號中,why?小括號為什麼這麼神奇?

按照ecamscript的規定,函式宣告是必須要有名字的,但是我們用括號擴起來那麼這個函式就不再是乙個函式宣告了,而是乙個函式表示式,你可以理解成下面這段**。

var a = function()(); //1

將乙個匿名函式賦值給乙個變數或者物件屬性就是函式表示式,函式表示式是可以不需要名字的,所以我們就可以直接通過這種方式來自動的執行這個函式。

再說一句

(function())()

第乙個括號是個運算子,它會返回這個匿名函式,然後最後乙個小括號會執行這個函式。

對匿名函式的理解1:

function()

// 報錯

不能直接使用。

對匿名函式的理解2:

var a = function()

a(); //1

匿名函式可以依附於乙個變數,並且這個變數名就是這個匿名函式的名字。

var a = function()

console.log(typeof a); //function

對匿名函式的理解3:

window.onload = function()

// 匿名函式

當匿名函式用在繫結事件中的時候,當這個事件執行的時候這個匿名函式也會被執行。

對匿名函式的理解4:

(function())()

// 追夢子

如果將匿名函式放入到表示式中並且後面加上小括號會自動執行這個函式

對匿名函式的理解5:

var a = function()();

// 自執行函式

匿名函式後面加括號會執行這個函式。

對匿名函式的理解6:

function()();

// 報錯

匿名函式必須依附乙個變數。

對匿名函式的理解7:

var a = 

}a.fn(); //1

匿名函式不只是可以依附於乙個變數,也可以依附於乙個物件的屬性。

對匿名函式的理解8:

var a = ()

} //追夢子

同樣的匿名函式當做乙個物件的屬性時也可以自呼叫。

對匿名函式的理解9:

var a = function(b)

a(52); //52

匿名函式也可以傳遞引數

對匿名函式的理解10:

(function(a))(10) //10

對於表示式函式同樣也可以傳遞引數

對匿名函式的理解11:

var a = function(b)(10); //10

console.log(a); //undefined

如果將乙個自執行的匿名函式並且沒有返回值,賦值給乙個變數那麼這個變數的值就是undefined。因為這個函式在賦值之前已經執行完了,而這個函式沒有返回值,所以就是undefined,如果有返回值,那麼這個變數的值就是那個匿名函式的返回值。

var a = function(b)(10);

console.log(a); //10

這裡對匿名函式的講解就到此結束,下面說一下關於自執行的匿名函式問題。

why?為什麼下面這段**會報錯?

function()

// 報錯

1、因為ecamscript規定函式的宣告必須要有名字,如果沒有名字的話,我們就沒有辦法找到它了,對於為什麼自執行函式為什麼就可以不帶名字後面會講。

2、如果沒有名字必須要有乙個依附體,如:將這個匿名函式賦值給乙個變數。

如果按照上面的說法js報錯也是應該的,那麼我們用的下面這種**為什麼就能夠正常執行?

(function())() //1

之所以可以是因為我們將這個函式包含在了乙個小括號中,why?小括號為什麼這麼神奇?

按照ecamscript的規定,函式宣告是必須要有名字的,但是我們用括號擴起來那麼這個函式就不再是乙個函式宣告了,而是乙個函式表示式,你可以理解成下面這段**。

var a = function()(); //1

將乙個匿名函式賦值給乙個變數或者物件屬性就是函式表示式,函式表示式是可以不需要名字的,所以我們就可以直接通過這種方式來自動的執行這個函式。

再說一句

(function())()

第乙個括號是個運算子,它會返回這個匿名函式,然後最後乙個小括號會執行這個函式。

對匿名函式的深入理解(徹底版)

從簡單的字面理解就是乙個沒有名字的函式,但是如果說它只是這樣簡單,那我也就沒有必要來說這些。對匿名函式的理解1 function 報錯 不能直接使用。對匿名函式的理解2 var a function a 1 匿名函式可以依附於乙個變數,並且這個變數名就是這個匿名函式的名字。var a functio...

深入理解匿名函式

從簡單的字面理解就是乙個沒有名字的函式,但是如果說它只是這樣簡單,那我也就沒有必要來說這些。對匿名函式的理解1 function 報錯 不能直接使用。對匿名函式的理解2 var a function a 1 匿名函式可以依附於乙個變數,並且這個變數名就是這個匿名函式的名字。var a functio...

對this 的深入理解

this的取值,分四種情況。我們來挨個看一下。在此再強調一遍乙個非常重要的知識點 在函式中this到底取何值,是在函式真正被呼叫執行的時候確定的,函式定義的時候確定不了。因為this的取值是執行上下文環境的一部分,每次呼叫函式,都會產生乙個新的執行上下文環境。情況1 建構函式 所謂建構函式就是用來n...