首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >需要帮助理解Javascript中的(词法)变量作用域

需要帮助理解Javascript中的(词法)变量作用域
EN

Stack Overflow用户
提问于 2012-07-17 22:12:47
回答 2查看 85关注 0票数 3

我有一个用NodeJS执行的.js文件。下面是我的文件的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var ctry = "America";

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

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

如果我注释掉内部的var _ ctry =行,我会得到“上帝保佑美国”,如果我把内部的var _ ctry =行移到console.log上面,我会得到“上帝保佑加拿大”。后两种情况似乎合乎逻辑,但为什么在上面的代码中,console.log后面的变量定义导致ctry被设置为underfined?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-17 22:14:53

局部变量(在本例中为ctry)的作用域是在其中声明该变量的整个函数(也就是说,就好像该变量是在函数的顶部声明的一样)。上面的代码在语义上与:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function outer(msg) {
    var ctry ;
    console.log(msg + " " + ctry) ;
    ctry = "Canada" ;
}

现在应该很清楚为什么要在输出中使用undefined了。

票数 5
EN

Stack Overflow用户

发布于 2012-07-17 22:17:11

当您在一个函数内说var ctry (只要它在函数内就无关紧要),那么在函数内对ctry的任何调用(同样,在哪里都不重要)将引用内部变量,而不是全局变量。问题是,JS解释器只看到一个变量的定义,但直到执行该行才会用值(Canada)初始化它,所以在console.log中它还是未定义的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11531610

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文