hoisting behavior changed between chrome 48 and 49 ?
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 10 11 | if (true) { function test() { console.log(true); } } else { function test() { console.log(false); } } test() |
Chrome 48(和节点<5.9.1)记录为false,chrome 49(和firefox)记录为true。 我猜他们通过不从falsy分支中提升来优化,但这可能会破坏现有的应用程序。 根据规格哪一个是正确的?
根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function,ECMAScript标准是在块语句中重新提升函数声明以进行条件创建,这就是Chrome 49 似乎在做。
然而,在ECMAScript 6之前,在条件块中声明函数的行为是未定义的 - 浏览器可以使用该条件创建机制,提升他们看到的第一个(或最后一个)函数(这是Chrome 48似乎要做的),而不是提升 函数并在