gpt4 book ai didi

javascript - 函数定义未提升

转载 作者:行者123 更新时间:2023-11-28 04:39:47 24 4
gpt4 key购买 nike

W.r.t fxn 定义的提升。

if (true) {
function foo() {
alert(1)
}
} else {
function foo() {
alert(2)
}
}
foo()

Chrome,大约 2-3 个月前 - 会打印 2。现在,它打印 1。我是否错过了什么,或者控制台是否停止在 fxn 上提升!

DEMO -- prints 1. 我不知道在哪里可以找到旧浏览器版本的演示。可能是较旧的 v8 引擎的节点安装?当前 chrome 版本 - 49

最佳答案

您拥有的代码在严格模式下无效。函数不会被提升出 block (或者至少不应该), block 内的函数声明在 ES6 之前是完全非法的。你应该写

"use strict";
var foo;
if (true) {
foo = function() {
alert(1)
};
} else {
foo = function() {
alert(2)
};
}
foo()

获得所需的行为以及可重现的预期结果。

Did I miss something or, did console stop hoisting on fxn's!

看起来 V8 已更新以与 the ES6 spec 保持一致。它确实将它们“提升”到函数/顶级作用域,但仅在实际遇到声明时(在您的情况下,有条件地)。

关于javascript - 函数定义未提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43881404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com