gpt4 book ai didi

Javascript:为什么 if 语句不计算函数中提升的变量

转载 作者:行者123 更新时间:2023-11-28 18:19:56 26 4
gpt4 key购买 nike

据我所知,变量声明在定义它们的上下文中被提升,但是在下面的代码中,taken from here

var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();

if(!foo)计算结果为true但为什么?我的意思是var foo此语句 var foo = 10 中已存在之前if(!foo)因此在 foo 的上下文中评估 if(!foo)应该解析为 if(!true) ,进一步解析为 if(false)这意味着 if block 不应该被执行,但是 if (!foo) 计算结果为 true,因此执行 if block 中的代码并发出警报 10

任何人都可以告诉我为什么以及重要的是如何评估 if 条件吗?

最佳答案

欢迎来到Javascript "Hoisting"做看起来不像正在做的事情的能力是令人讨厌的:)

那么,Javascript 没有 if 子句的 block 作用域,它以一种奇怪的方式弥补了这一点。我的意思是,当你这样做时

function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}

它实际上被翻译为:

function bar() {
var foo;
if (!foo) {
foo = 10;
}
alert(foo);
}

在执行之前,以便所有变量在使用之前都已声明。基于此,foo 将是未定义,并且不是在函数外部声明的全局值。因此,当您调用 if (!foo) 时,它将评估 !undefined,它始终为 true

关于Javascript:为什么 if 语句不计算函数中提升的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40060151/

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