我试图让我的头绕着范围界定。根据我的理解,ES5不具备阻塞范围的能力,因此,内部f()应该位于身体测试的范围内。在JavaScript和内部函数中使用块范围
这些是从运行功能
- 测试(真)的结果; // [ “本地”, “本地”]
- 测试(假)// f不是定义
不过,我不明白为什么测试(假)给出了一个错误?我期待 - [本地]。
function f() { return "global"; }
function test(x) {
var result = [];
if (x) {
function f() { return "local"; } // block-local
result.push(f());
}
result.push(f());
return result;
}
[非常相似的问题。](http://stackoverflow.com/q/10069204/417562) – lonesomeday
哈!如果您在Chrome 54中使用“严格”模式,则结果为[“本地”,“全局”],[“全局”]。所以它似乎通过在'if'中创建范围来修复事情。我认为这不应该被允许,因此不一致的结果。否则,这是浏览器中的一个错误,因为根据我的理解,函数应该在整个函数中可用,并且不受'if'影响。 –