我一直在使用Stoyan Stefanov使用面向对象的JavaScript学习Javascript
他提供了一个比较全局和本地范围的示例:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
Run Code Online (Sandbox Code Playgroud)
看看这个例子,我预计第一个警报为'123',第二个警报为'1'.瞧,斯托扬说:
您可能希望第一个alert()将显示123(全局变量a的值),第二个将显示1(本地a).不是这种情况.第一个警报将显示"未定义".这是因为在函数内部,局部范围比全局范围更重要.因此局部变量会覆盖具有相同名称的任何全局变量.在第一个alert()时,a尚未定义(因此值未定义),但它仍然存在于本地空间中.
我的解释并不清楚,局部变量如何在第一个警报中覆盖全局变量?任何其他/不同的解释将不胜感激.
Jua*_*des 10
它不会覆盖全局变量.发生的事情被称为"可变吊装".也就是说,a var a;插入函数的顶部.
脚本引擎将脚本更改为以下内容:
var a = 123;
function f() {
var a;
alert(a);
a = 1;
alert(a);
}
f();
Run Code Online (Sandbox Code Playgroud)
需要学习的经验:在使用之前始终声明变量.有些人会说在函数顶部声明所有变量.
| 归档时间: |
|
| 查看次数: |
1747 次 |
| 最近记录: |