有人可以解释为什么布尔("a" in window
)在第一个示例中抛出 true 而在第二个示例中抛出 false 吗?
我实际上不知道这个in
是什么,以及如何计算这个布尔值?
第一个示例:
if ("a" in window) {
var a = 1;
}
console.log(a);
第二个示例:
console.log("a" in window);
答案 0 :(得分:1)
正如@CertainPerformance所述,您的 var
会hoisted到达顶部并可以全局访问 ,这是JavaScript中的正常行为。仅供参考,他们在ES6中为块作用域引入了let
关键字。
因此您可以观察到,两个语句都返回boolean
,但是在您的if
条件下,您正在为变量a
赋值1,因此返回相同的值,而后一个则直接返回布尔值。
简而言之,在第一种情况下 将打印变量值 ,而在第二种情况下 则将打印结果条件 。
if (true) {
(function() {
var a = 1;
console.log('in block, a = ' + a); // returns 1
})(); // IIFE
}
console.log(a); // inaccessible here, returns an error
与ES6类似-
if (true) {
let a = 1; // let keyword
console.log('in block, a = ' + a); // returns 1
}
console.log(a); // inaccessible here, returns an error
答案 1 :(得分:0)