gpt4 book ai didi

javascript - 函数作用域中的变量是否像全局作用域中的变量一样提升到开头?

转载 作者:行者123 更新时间:2023-12-01 01:10:34 25 4
gpt4 key购买 nike

我无法找到明确的答案,所以我会在这里尝试。

编辑:这个问题与 var 是否从其所在作用域的开头可用有关,而是我想知道在声明全局变量时或在函数声明时是否声明了 var已调用。

考虑这个例子:

var a = "foo";
function xyz(){
var b = "bar";
}
xyz();

当我运行这段代码时,var b 会被提升到哪里?

会是:

declare function xyz
declare var a
assign value "foo" to var a
execute xyz()
>> declare var b
assign value "bar" to var b

或者会是:

declare function xyz
declare var a
>> declare var b
assign value "foo" to var a
execute xyz()
assign value "bar" to var b

我知道 var b 无法从全局范围访问,但我很好奇这里发生的事情的顺序。

提前致谢

最佳答案

变量b在执行xyz()时初始化,但在解释过程中并未初始化。

function host() {
var b;
}
var a;

var aIsDeclared = true;
var bIsDeclared = true;

try{ a; }
catch(e) {
if(e.name == "ReferenceError") {
aIsDeclared = false;
}
}

try{ b; }
catch(e) {
if(e.name == "ReferenceError") {
bIsDeclared = false;
}
}

console.log("a is declared : ", aIsDeclared)
console.log("b is declared : ", bIsDeclared)

关于javascript - 函数作用域中的变量是否像全局作用域中的变量一样提升到开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55183723/

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