當前位置:
首頁 > 知識 > 對匿名函數的深入理解(徹底版)

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

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

對匿名函數的理解1:

function(){
console.log(1);
}
// 報錯

不能直接使用。

對匿名函數的理解2:

var a = function(){
console.log(1);
}
a(); //1

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

var a = function(){
console.log(1);
}
console.log(typeof a); //function

對匿名函數的理解3:

window.onload = function(){
console.log("匿名函數");
}
// 匿名函數

當匿名函數用在綁定事件中的時候,當這個事件執行的時候這個匿名函數也會被執行。

對匿名函數的理解4:

(function(){
console.log("追夢子");
})()
// 追夢子

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

對匿名函數的理解5:

var a = function(){
console.log("自執行函數");
}();
// 自執行函數

匿名函數後面加括弧會執行這個函數。

對匿名函數的理解6:

function(){
console.log(1);
}();
// 報錯

匿名函數必須依附一個變數。

對匿名函數的理解7:

var a = {
fn:function(){
console.log(1);
}
}
a.fn(); //1

匿名函數不只是可以依附於一個變數,也可以依附於一個對象的屬性。

對匿名函數的理解8:

var a = {
fn:function(){
console.log("追夢子");
}()
} //追夢子

同樣的匿名函數當做一個對象的屬性時也可以自調用。

對匿名函數的理解9:

var a = function(b){
console.log(b)
}
a(52); //52

匿名函數也可以傳遞參數

對匿名函數的理解10:

(function(a){
console.log(a);
})(10) //10

對於表達式函數同樣也可以傳遞參數

對匿名函數的理解11:

var a = function(b){
console.log(b);
}(10); //10
console.log(a); //undefined

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

var a = function(b){
return b;
}(10);
console.log(a); //10

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

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

function(){
console.log(1);
}
// 報錯

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

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

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

(function(){
console.log(1);
})() //1

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

按照ECAMScript的規定,函數聲明是必須要有名字的,但是我們用括弧擴起來那麼這個函數就不再是一個函數聲明了,而是一個函數表達式,你可以理解成下面這段代碼。

var a = function(){
console.log(1);
}(); //1

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

再說一句

(function(){
....
})()

第一個括弧是個運算符,它會返回這個匿名函數,然後最後一個小括弧會執行這個函數。

總結也就是說只要是表達式就可以直接執行它,並且不需要函數名,那麼我們還可以這樣調用它。

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

-function(){
console.log(1);
}()
+function(){
console.log(2);
}()
~function(){
console.log(3);
}()
!function(){
console.log(4);
}()
&function(){
console.log(5);
}()
|function(){
console.log(6);
}()
/function(){
console.log(7);
}()
/function(){
console.log(8)
}()
%function(){
console.log(9)
}()
typeof function(){
console.log(10)
}()
null==function(){
console.log(11)
}()
0==function(){
console.log(12)
}()
0!=function(){
console.log(13)
}()
0>function(){
console.log(14)
}()
0<function(){
console.log(15)
}()
0-function(){
console.log(16)
}()

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

作者:追夢子

原文:https://www.cnblogs.com/pssp/p/5216668.html

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

跨域Iframe腳本調用
非對稱加密演算法RSA 學習

TAG:程序員小新人學習 |