首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript局部和全局变量混淆

JavaScript局部和全局变量混淆
EN

Stack Overflow用户
提问于 2013-11-01 13:27:10
回答 2查看 21.2K关注 0票数 98

我是JavaScript的新手,我在局部和全局变量作用域上做过一些实践。以下是我的代码(fiddle):

代码语言:javascript
复制
var myname = "initial"
function c(){
    alert(myname);
    var myname = "changed";
    alert(myname);
}
c();

当第一个警报被调用时,它将myname显示为未定义。所以我的困惑是为什么我不能访问myname的全局实例,如果我没有在函数中定义myname,那么它就会工作得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-01 13:31:45

在JavaScript中,变量声明会自动移到函数的顶部。因此,解释器会让它看起来更像这样:

代码语言:javascript
复制
var myname = "initial"
function c(){
    var myname;
    // Alerts undefined
    alert(myname);
    myname = "changed";
    // Alerts changed
    alert(myname);
}
c();

这称为hoisting

由于提升和任何变量的作用域都是在其中声明它的函数的事实,标准做法是在函数的顶部列出所有变量以避免这种混淆。

票数 59
EN

Stack Overflow用户

发布于 2013-11-01 13:29:10

它不会替换全局变量。正在发生的情况被称为“变量提升”。也就是说,var myname;被插入到函数的顶部。在使用变量之前,一定要对它们进行初始化。

试试这个:

代码语言:javascript
复制
var myname = "initial";

function c() {
    alert(myname);
    myname = "changed";
    alert(myname);
}

c();

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

https://stackoverflow.com/questions/19721313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档