2017-02-07 65 views
4

我見過以下兩種方式實現的各種代碼。我總是使用第二個(2.)。我想知道兩件事。這段JavaScript代碼有什麼區別嗎?

  1. 是否有這兩個碼之間有什麼區別?

  2. 哪一個是最好的做法(爲什麼),如果有的話?

1.

(function() { 
    //some code here, angular code 
})(); 

2.

(function() { 
    //some code here, angular code 
}); 

請還建議我一些很好的博客或者書在這方面,我想更詳細地瞭解。謝謝大家前進..

+6

#2不會被調用 – charlietfl

回答

9

是的,你沒有執行第二個。

在第一個例子中,您聲明一個匿名函數,它獲取不帶參數運行之後。

在第二個例子中,你只是聲明它,但沒有運行它。

()是由它傳遞任何參數是什麼使得它運行,在這種情況下。

這一個執行匿名函數:

(function() { 
     //some code here, angular code 
    })(); 

這一個不執行它:

(function() { 
     //some code here, angular code 
    }); 

例如,如果你有一個參數,你可以通過它像這樣:

(function (c) { 
     // c.log() is same as console.log 
     c.log("hello"); 
    })(console); 

注:我已經添加了參數示例,因爲它沒有任何參數不太明顯。

編輯:

由於@Osman剛纔指出的意見,第一個被稱爲IIFE

這種模式是如此普遍,幾年前社區商定了它 項:IIFE,主張立即調用函數 表達。

3

第二是聲明,第一是聲明和執行。

0

第一個是IIFE(立即調用的函數表達式)的人說,對IIFE檢查this repo更多信息由凱爾·辛普森(你的作者不知道JS)

1

差異:

第一個執行匿名函數表達式

(function() { 
     //some code here, angular code 
    })(); 

第二個不執行它:

(function() { 
     //some code here, angular code 
    }); 

是沒有名稱的函數。

背景:

基本上,我們首先與(__function_declaration__)包裹匿名功能聲明,使之成爲功能表達

// this is a function declaration: 
    function() { 
     //some code here 
    } 

    // this is a function expression 
    (function() { 
     //some code here 
    }); 

它本身什麼都不做因爲我們既沒有執行它,也沒有在當前範圍內聲明它。換句話說,它是無用的。瞭解更多關於difference between function declaration & function expression

現在,我們可以使用函數表達式作爲參數傳遞給其他一些功能,如jQuery不會:

// now jQuery is taking the function expression as parameter 
    $(function() { 
     //some code here 
    }); 

或者,我們可以通過在最後使用()執行本身的功能(這是我們如何調用任何實際功能 - 在這種情況下,不帶任何參數):

// Now the function expression gets executed. 
    (function() { 
     //some code here, angular code 
    })(); 

這也被稱爲Immediately-Invoked Function Expression or IIFE

上面的例子沒有任何參數。但是,如果你有一個參數,你可以通過它像這樣在執行:

(function (c) { 
     // Here c.log() is same as console.log() 
     c.log("hello"); 
    })(console); 

注:我已經添加了參數的例子,因爲它可能是不帶任何參數不太明顯。

最佳實踐:

由於功能上它們是不同的,最佳實踐的問題不會出現。通常我們使用IIFE的情況下,我們想要執行的東西在一個範圍不同於當前範圍&我們不想在當前範圍內留下任何足跡的函數聲明,變量聲明等。

延伸閱讀:

更多關於這個討論可以發現herehereherehere

+0

我真的不知道這件事,THX隊友。做ü知道,有詳細的解釋這個概念,我想了解更多信息的任何職務 –