2010-11-10 44 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() { }; 

})();