Javascript 函数声明-函数表达式-作用域

Javascript 函数声明-函数表达式-作用域,javascript,scope,Javascript,Scope,在javascript中,函数声明和函数表达式在作用域方面有什么区别?函数声明意味着我们正在污染全球空间。函数表达式也是这样吗 功能声明 function sum(){ // logic goes here } var sum = function(){} 函数表达式 function sum(){ // logic goes here } var sum = function(){} 就封闭范围而言,两者是等效的。请注意,它不一定是全局范围-它是声明函数的范围(在其他函数中允许使用

在javascript中,函数声明和函数表达式在作用域方面有什么区别?函数声明意味着我们正在污染全球空间。函数表达式也是这样吗

功能声明

function sum(){
 // logic goes here
}
var sum = function(){}
函数表达式

function sum(){
 // logic goes here
}
var sum = function(){}

就封闭范围而言,两者是等效的。请注意,它不一定是全局范围-它是声明函数的范围(在其他函数中允许使用局部函数)。在您的示例中,这两种方法都将名为
sum
的变量(函数对象)引入局部范围。

这两种方法在范围上是等效的。在另一个函数中声明的函数将不是全局函数。不同之处在于,您可以在任何时候使用声明的函数(因为它是在任何代码运行之前被提升的),只有在您分配了函数之后,才可以将其作为表达式分配给变量

(function () {

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

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

})();