我是JavaScript的新手,我在本地和全局变量作用域上做了一些练习,以下是我的代码(小提琴):
var myname = "initial"
function c(){
alert(myname);
var myname = "changed";
alert(myname);
}
c();Run Code Online (Sandbox Code Playgroud)
当第一个警报被调用时,它显示myname为未定义.所以我的困惑是为什么我无法访问全局实例,myname如果我没有myname在函数中定义,那么它将正常工作.
Emp*_*nal 50
在Javascript中,变量声明会自动移动到函数的顶部.所以,解释器会让它看起来更像这样:
var myname = "initial"
function c(){
var myname;
// alerts undefined
alert(myname);
myname = "changed";
// alerts changed
alert(myname);
}
c();Run Code Online (Sandbox Code Playgroud)
这被称为"吊装".
由于提升以及任何变量的范围是其声明的函数这一事实,标准做法是在函数顶部列出所有变量以避免这种混淆.
它不是取代全局变量.发生的事情被称为"可变吊装".也就是说,var myname;插入函数的顶部.在使用变量之前始终初始化变量 - 试试这个:
var myname = "initial";
function c() {
alert(myname);
myname = "changed";
alert(myname);
}
c();Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20062 次 |
| 最近记录: |