在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

上一篇: Understanding Global & Local Scope in Javascript

下一篇: When was the first version of Hadoop released?