我有一个用 NodeJS 执行的 .js 文件。这是我的文件的内容:
var ctry = "America";
function outer(msg) {
console.log(msg + " " + ctry) ;
var ctry = "Canada" ;
}
outer("God Bless");
当我运行这个文件时,我希望看到“God Bless America”,但我看到的却是“God Bless undefined”。
如果我注释掉内部 var ctry = 行,我得到“上帝保佑美国”,如果我将内部 var ctry = 行移到 console.log 上方,我得到“上帝保佑加拿大”。后两种情况看起来合乎逻辑,但为什么 console.log 之后的 var ctry 定义导致 ctry 在上面的代码中被设置为 underfined?
最佳答案
局部变量(在您的例子中为 ctry
)的范围是声明它的函数的整体(也就是说,就好像声明了变量一样在函数的顶部)。您上面的代码在语义上与:
function outer(msg) {
var ctry ;
console.log(msg + " " + ctry) ;
ctry = "Canada" ;
}
现在应该清楚为什么输出中出现 undefined
了。
关于javascript - 需要帮助理解 Javascript 中的(词法)变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531610/