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

标签 javascript scope lexical

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

相关文章:

javascript - 使用 ajax/jquery 的浏览器即时更新

javascript - 在 jQuery 中遍历表格元素

php - 同步旋转背景和标题

ruby-on-rails - Ruby on Rails 简单搜索和范围过滤器

JavaScript - 未捕获的 ReferenceError : checkAnswer is not defined, 函数不在范围内?

python - python 中的嵌套范围

javascript - 为什么在引用其外部环境时我不能访问这个特定变量?

javascript - 带有 "link"关键字的 Mustache.js 扩展行为

c++ - 我可以在C++中使用正则表达式使用哪些正则表达式来解析分隔符,运算符,标识符和实数?

java - 具有整数文字的解析器