gpt4 book ai didi

javascript - block 作用域函数 ECMAScript 6 奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 10:31:46 24 4
gpt4 key购买 nike

我正在阅读 ECMA6 中的新功能。其中一项新功能是 Block Scoped Functions .这意味着我们可以为不同 block 中的函数使用相同的名称。在下面的代码中 block1 foo() 记录 1 然后类似地 block2 foo() 记录 2 和 block0 foo() 或全局scope 记录 4。这是预期的结果。但我不明白的是,为什么最后一个 console.log(foo()) 记录 1 而不是 4,因为它在 block0 或全局范围内 而不是它记录 1,即 block1 foo()

//block0
function foo () { return 4 }
console.log(foo());//will log 4
{
//block1
function foo () { return 1 }
console.log(foo());//will log 1
{
//block2
function foo () { return 2 }//a block level function
console.log(foo());//will log 2
}
console.log(foo());//will again log 1
}
console.log(foo());//should log 4 but logs 1 why?

现在,如果我将上述代码封装到另一个 block 中,它会按预期工作。这让我有点困惑。究竟是什么导致了这种行为?

{//block0
function foo () { return 4 }
console.log(foo());//will log 4
{
//block1
function foo () { return 1 }
console.log(foo());//will log 1
{
//block2
function foo () { return 2 }
console.log(foo());//will log 2
}
console.log(foo());//will again log 1
}
console.log(foo());//will log 4 but
}

最佳答案

您需要确保启用严格模式。由于默认情况下它在模块中启用,我猜你的示例代码没有显示。 Kangax's compatibility table显示适当的测试。

"use strict";
//block0
function foo () { return 4 }
console.log(foo());//will log 4
{
//block1
function foo () { return 1 }
console.log(foo());//will log 1
{
//block2
function foo () { return 2 }//a block level function
console.log(foo());//will log 2
}
console.log(foo());//will again log 1
}
console.log(foo());//logs 4

关于javascript - block 作用域函数 ECMAScript 6 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450644/

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