JavaScript局部变量和全局变量混淆
JavaScript local and global variable confusion
我是 JavaScript 的新手,我正在对局部和全局变量范围进行一些练习。以下是我的代码(小提琴):
var myname = "initial"
function c(){
alert(myname);
var myname = "changed";
alert(myname);
}
c();
调用第一个警报时,它将myname
显示为未定义。所以我的困惑是为什么我无法访问myname
的全局实例,如果我不在函数中定义myname
,那么它将正常工作。
在 JavaScript 中,变量声明会自动移动到函数的顶部。因此,解释器会使其看起来更像这样:
var myname = "initial"
function c(){
var myname;
// Alerts undefined
alert(myname);
myname = "changed";
// Alerts changed
alert(myname);
}
c();
这称为吊装。
由于提升以及任何变量的作用域都是声明它的函数这一事实,标准做法是在函数顶部列出所有变量以避免这种混淆。
它不会替换全局变量。正在发生的事情被称为"可变吊装"。也就是说,var myname;
入到函数的顶部。在使用变量之前,请始终对其进行初始化。
试试这个:
var myname = "initial";
function c() {
alert(myname);
myname = "changed";
alert(myname);
}
c();
相关文章:
- 如何使用局部变量创建全局变量
- 局部变量在应用 function.call() 后变为全局变量
- 在d3.js中将局部变量转换为全局变量
- javascript中的全局和局部变量执行上下文
- 如何将局部变量反转为全局、点或括号表示法
- JavaScript局部变量和全局变量混淆
- 如何在 JavaScript 中将局部变量转换为全局变量
- 函数是否像局部变量一样适用于全局变量
- 全局访问的 JavaScript 函数局部变量
- JavaScript 中的全局变量到局部变量
- 为什么我的 JavaScript 提升的局部变量返回未定义,但提升的全局变量返回空白
- 用于将全局或属性别名为局部变量的 Word 以便更好地压缩
- 如何在 JavaScript 中检查变量是局部变量还是全局变量
- 为什么全局变量无法访问,即使稍后在代码中定义了局部变量
- 如何将全局作用域变量引用到局部作用域中
- 如何理解javascript中的全局和局部变量
- 事件处理程序函数上的全局和局部变量
- 与全局和局部变量访问混淆
- JavaScript引擎如何读取和执行具有冲突全局和局部变量的函数
- JavaScript全局使用局部变量