在javascript中,函数声明和函数表达式在范围方面有什么区别?功能声明意味着我们正在污染全球空间。是否与函数表达式相同?
功能声明
function sum(){
// logic goes here
}
功能表达
var sum = function(){}
答案 0 :(得分:9)
两者在范围方面都是等同的。在另一个函数中声明的函数将不是全局函数。不同之处在于您可以随时使用声明的函数(因为在运行任何代码之前它是提升),只有在您之后才将一个函数作为表达式分配给变量分配了它。
(function () {
bar(); // works
function bar() { } // is not global
foo(); // doesn't work
var foo = function () { };
})();
答案 1 :(得分:5)
就污染封闭范围而言,两者都是等价的。请注意,它不一定是全局范围 - 它是声明函数的范围(在其他函数中允许本地函数)。在您的示例中,两个方法都将名为sum
的变量(函数对象)引入本地范围。