man*_*nta 5 javascript type-coercion truthiness hoisting
我一直在阅读有关JavaScript吊装的消息.
Ben Cherry的JavaScript范围和吊装
Dmitry Soshnikov关于"吊装"的两个词
而且,更多关于JavaScript类型强制,真假测试: 真理,平等和JavaScript以及其他一些资源
在练习一些时,发现我遗漏了一些关于吊装的重要概念和一个变量'truthy&falsy.
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}
}
bar();
Run Code Online (Sandbox Code Playgroud)
O/P: inside if
怀疑: 'foo'值为'1',if(!foo)应该评估false并且不应该执行该块(引用来自上面的资源:提升仅影响var&function声明,但不影响执行).但为什么会显示该警报.如果我直接使用就不是这种情况false(如下面的no-tricks代码所示:代码片段#3)
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
Run Code Online (Sandbox Code Playgroud)
o/p:没有输出; 意味着控制没有进入'如果'块
这是人们可以期待的
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
Run Code Online (Sandbox Code Playgroud)
o/p:没有输出; 意味着控制没有进入'如果'块
这是人们可以期待的
有人请澄清一下.谢谢
对于您的示例编号1,将显示警报,因为您在var函数内部使用并且var声明被提升到函数的顶部,因此它等效于:
var foo = 1;
function bar() {
var foo;
if (!foo) {
alert('inside if');
foo = 10;
}
}
bar();
Run Code Online (Sandbox Code Playgroud)
有人可能会得出结论,这些问题提供了令人信服的理由,即在函数顶部明确声明所有变量.