gpt4 book ai didi

javascript - 嵌套 block 作用域中的函数声明

转载 作者:行者123 更新时间:2023-11-30 10:58:58 25 4
gpt4 key购买 nike

与此一样reference , 函数声明语句和变量声明没有 block 作用域。所以我要问为什么下面的代码以这种方式执行。

    //javascript es6
{
function bar() {
console.log("1");
}
}
function bar() {
console.log("2");
}

bar(); //prints "1" not "2"
this.bar() //also prints "1" not "2"

我所知道的是上面的代码应该在全局范围内考虑这两个函数,但函数声明似乎受到 block 范围的影响。

最佳答案

基本上,函数声明在代码执行之前运行。让我试着说得更清楚。

让我们先将这些函数重命名为这样,这样我就可以更好地解释它是如何工作的:

    {
function bar() {
console.log("1");
}
}
function foo() {
console.log("2");
}

你的编译器所做的是它扫描你的 js 文件并发现有一个函数声明是 foo 函数(忽略括号内的那个)。然后它像往常一样运行 js 文件,进入括号内并看到在 foo() 函数之后声明了另一个函数声明(bar() 函数)。

基本上,这就是您将获得的结果:

bar() // returns "2"

{
function bar() {
console.log("1")
}
}
bar() // returns "1"

function bar() {
console.log("2")
}

bar() // returns "1"

我希望这是有道理的。

有关更多信息,请尝试查找函数表达式与函数声明,并查看 javascript 编译器的工作原理,这将使您更好地理解提升的工作原理。

关于javascript - 嵌套 block 作用域中的函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58731388/

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