在Javascript中了解全球和本地范围
我一直在使用Stoyan Stefanov使用面向对象的JavaScript学习Javascript
他举了一个比较全球和本地范围的例子:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
看看这个例子,我预计第一个警报是'123',第二个警报是'1'。 你看,斯托扬说:
您可能预期第一个alert()将显示123(全局变量a的值),第二个将显示1(本地a)。 不是这种情况。 第一个警报将显示“未定义”。 这是因为在函数内局部范围比全局范围更重要。 所以一个局部变量覆盖任何具有相同名称的全局变量。 在第一次警报时()a尚未定义(因此值未定义),但仍存在于本地空间中。
我的解释并不清楚,局部变量如何覆盖第一个警报中的全局变量? 任何其他/不同的解释将不胜感激。
它并没有压倒全球变数。 发生的事情被称为“变量提升”。 也就是说,一个var a;
插入到函数的顶部。
脚本引擎将您的脚本更改为以下内容:
var a = 123;
function f() {
var a;
alert(a);
a = 1;
alert(a);
}
f();
学习课程:在使用它们之前,始终声明变量。 有些人会说在函数的顶部声明所有的变量。
简而言之,首先考虑变量和函数的所有声明。 因此,局部变量var a
只会在本地作用域中覆盖全局变量,并且没有值,即undefined
。 所以第一个警报将显示undefined
。 第二次警报将显示1,因为它在a = 1
。 这只发生在本地,全局变量a将具有值123 - 它不会被改变。
另一个使用函数来展示它如何工作的例子
function show(){
alert("I am global");
}
function f() {
show();
show = function(){
alert("I am second");
}
show();
function show(){
alert("I am first");
}
}
f();
show();
链接地址: http://www.djcxy.com/p/51661.html