var
javascript中的关键字导致变量存储在本地范围内。没有 var
变量属于全局范围。函数呢?很清楚当函数被声明为变量时会发生什么
var foo = function() {...}
但是作用域是什么
function foo() {...}
属于?
编辑:
我意识到我没有问完全正确的问题,所以作为跟进。在最外层的嵌套中,上面的两个声明和下面的声明有区别吗?
foo = function() {...}
最佳答案
它始终属于当前范围。例如:
// global scope
// foo is a global function
function foo() {
// bar is local to foo
function bar() {
}
}
关于你的第二个问题,这个:foo = function() {...}
是分配给全局变量的匿名函数表达式(除非您运行的是严格模式,否则 foo
将是未定义的)。那和 function foo() {}
的区别是后者是一个函数声明(相对于变量声明,它被分配了一个匿名函数表达式)。您可能会对这篇关于函数声明和函数表达式的优秀文章感兴趣:Named function expressions demystified .
关于函数声明的javascript范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14665160/