我有一个用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了。

10-06 08:23