繁体   English   中英

在Javascript中需要帮助理解(词法)变量范围

[英]Need help understanding (lexical) variable scope in Javascript

我有一个.js文件,我正在使用NodeJS执行。 这是我的文件的内容:

var ctry = "America";

function outer(msg) {
    console.log(msg + " " + ctry) ;
    var ctry = "Canada" ;
}
outer("God Bless");

当我运行这个文件时,我希望看到“上帝保佑美国”但相反,我看到“上帝保佑未定义”。

如果我注释掉内部var ctry = line,我会得到“God Bless America”,如果我将内部var ctry =行移到console.log之上,我会得到“God Bless Canada”。 最后两个案例似乎是合乎逻辑的,但为什么在console.log之后var ctry的定义导致ctry在上面的代码中被设置为underfined?

局部变量的范围(在您的情况下为ctry )是声明它的整个函数(也就是说,好像变量是在函数的顶部声明的)。 上面的代码在语义上与以下相同:

function outer(msg) {
    var ctry ;
    console.log(msg + " " + ctry) ;
    ctry = "Canada" ;
}

现在应该清楚为什么在输出中undefined

当你在一个函数里面说var ctry (只要它在函数内部并不重要),那么所发生的是在函数内部进行的任何对ctry的调用(再次,无关紧要)将引用内部函数变量,而不是全局变量。 问题是,JS解释器只看到变量的定义,但是在它执行该行之前不会使用值(加拿大)对其进行初始化,因此在console.log它尚未定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM