我有一个用NodeJS执行的.js文件。这是我文件的内容:
var ctry = "America";
function outer(msg) {
console.log(msg + " " + ctry) ;
var ctry = "Canada" ;
}
outer("God Bless");
运行此文件时,我希望看到“上帝保佑美国”,但相反,我看到“上帝保佑未定义”。
如果我注释掉内部变量ctry =行,则会得到“上帝保佑美国”,如果将内部变量ctry =行移到console.log上方,则会得到“上帝保佑加拿大”。最后两种情况似乎合乎逻辑,但是为什么在console.log之后对var ctry的定义导致ctry在上面的代码中设置为欠定义?
最佳答案
局部变量的范围(在您的情况下为ctry
)是声明它的整个函数(也就是说,就像该变量在函数顶部声明一样)。上面的代码在语义上与以下代码相同:
function outer(msg) {
var ctry ;
console.log(msg + " " + ctry) ;
ctry = "Canada" ;
}
现在应该清楚为什么在输出中得到
undefined
了。