我的问题可能是一点点" schoolish"但我落在那段代码上,我意识到我并不理解为什么它会返回" undefined"。通过使用Chrome调试器,我注意到a
变量在我们进入函数时似乎变为undefined
。我的第一感觉是代码块会返回2。
如果有人能对这个例子有所了解,那将非常感激
var a = 2;
console.log((function(condition){
if (condition) {
var a = 4;
return a;
} else {
return a;
}
})(false))
如果这个问题的标题不够清楚,我建议你提出更合适的其他内容。
答案 0 :(得分:1)
var
声明始终被解释为它被写在函数体的顶部,因此您的代码将作为
var a = 2;
console.log((function(condition){
var a;
if (condition) {
a = 4;
return a;
} else {
return a;
}
})(false))
由于condition
为false,因此else
子句运行,函数返回未初始化的a
值。本地var
声明隐藏了在函数外声明的相对全局a
;它不会影响函数的运行方式。
如果您使用a
而不是let
声明了本地var
,那么事情会有所不同。 a
子句中的else
引用将引用更全局的a
。 let
声明的范围限定在它的封闭块语句中,而var
总是生成函数范围的变量。