【发布时间】:2017-01-08 10:11:49
【问题描述】:
我阅读了 Kyle 的 I don't know JS 并了解到函数声明将 hoist 先于 var。所以在下面的代码中
<script>
foo();
var a = true;
if ( a ) {
function foo() { console.log( "a" ); }
}else {
function foo() { console.log( "b" ); }
}
foo();
</script>
foo 应该首先被提升并且应该打印“b”作为第一个 foo() 的输出,对吗?还是我错过了什么?
解释或链接以了解代码并在不同场景中提升将有很大帮助。
【问题讨论】:
-
标准 ES5 JavaScript 语法does not allow function declarations inside blocks。解析此代码的能力需要标准语法的扩展,并且执行行为在 ES5 实现之间有所不同。我不确定最新规范中的当前立场。
-
在 ES6 之前,块内的函数声明是未定义的行为。 Chrome 和 Firefox 的行为不同(也许他们仍然如此)。在 ES6 中,我相信这些不应该再被提升了。
-
大声笑,不要再写了。光是看着就眼睛疼。 :)
-
我试过了,没试过我从来没有发过问题。更重要的是,我想了解,所以问社区。无论如何,非常感谢!
标签: javascript hoisting