我有这样的功能。结果,10 显示在控制台中。
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
console.log(foo);
}
bar();
问:为什么?逻辑运算符“not”首先获取一个变量并将其转换为布尔类型 ( 1 --> true
),然后将生成的逻辑数据类型转换为其相反的 ( true --> false
)。
进一步在 if 条件中,我们得到 false,因此,不应该执行条件分支。为什么 if 执行,其中变量被分配了一个新值?
在此处阅读有关提升的更多信息。
在您的情况下,代码如下所示:
变量
foo
(在函数内部bar
)只会在条件之后定义。但是为什么值进入条件不是 1,而是undefined
?因为,“提高”这样的概念是有效的。那些。变量的声明
foo
(在函数内部bar
)被移动到范围的开头 - 即 特点bar
:使用这样的代码:
正式它将是:
此属性适用于函数和变量(但仅适用于那些通过
var
)