Same boolean calculation giving 2 different results in 2 different examples. Why?
本问题已经有最佳答案,请猛点这里访问。
有人解释为什么在布尔(CAN
我真的没有线索这是什么和如何获得这是
第一部分:
1 2 3 4 | if ("a" in window) { var a = 1; } console.log(a); |
第二部分:
1 | console.log("a" in window); |
正如@certainperformance所提到的,您的EDOCX1[4]被提升到顶部,在全球范围内都可以访问,这在javascript中是正常的行为。仅供参考,他们为ES6中的块范围引入了一个
因此,您可以观察到,这两个语句都返回
In short, in the first condition, you are printing a variable value, whereas in second one, you are printing the result of a condition.
如果您不希望在ES5中提升它们,可以有效地使用IIFES来限制范围,如下所示-
1 2 3 4 5 6 7 | if (true) { (function() { var a = 1; console.log('in block, a = ' + a); // returns 1 })(); // IIFE } console.log(a); // inaccessible here, returns an error |
同样,在ES6中-
1 2 3 4 5 | if (true) { let a = 1; // let keyword console.log('in block, a = ' + a); // returns 1 } console.log(a); // inaccessible here, returns an error |
第一个返回true,因为声明的变量(
参考
1 2 3 4 | if ("a" in window) { var t = 1; } console.log(t); |