2010-11-10 66 views
4

在JavaScript中,是什麼在範圍函數聲明和函數表達式之間的區別?函數聲明意味着我們正在污染全球空間。函數表達式是否一樣?函數聲明 - 函數表達式 - 範圍

函數聲明

function sum(){ 
// logic goes here 
} 

功能表達

var sum = function(){} 
+0

http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname和http://stackoverflow.com/questions/1013385/what-is-the-差之間-A-函數表達式-VS-聲明-在JavaScript的 – Phil 2010-11-10 05:19:32

回答

5

至於污染封閉範圍推移,二者是等效的。請注意,它不一定是全局範圍 - 它是聲明函數的範圍(在其他函數中允許本地函數)。在你的例子中,兩種方法都將一個名爲sum的變量(函數對象)引入本地作用域。

9

兩者都在範圍等同。函數聲明另一個函數內部不會是全球性的。所不同的是,你可以在任何時候使用聲明功能(因爲它是懸掛任何代碼運行之前),分配給一個變量,您分配它後纔會表達的功能。

(function() { 

    bar(); // works 
    function bar() { } // is not global 

    foo(); // doesn't work 
    var foo = function() { }; 

})();