JavaScript的全局变量的作用域问题(Javascript global variable s

2019-07-17 17:57发布

我遇到的JavaScript(看到一个奇怪的范围问题的jsfiddle ):

var someGlobal = 3;

function someF() {
    // undefined issue
    alert(someGlobal);
    var someGlobal = 5;
    // Displays 5
    alert(someGlobal);
}

function someF2() {
    // Displays 3, why?
    alert(someGlobal);
}

someF();
someF2();

为什么不使用Javascript抛出一个不确定的问题someF2() 为什么someF2()可以访问someGlobal ,和someF()不是? 我怎样才能确保全局变量是在函数访问?

备注:

在这两种情况下,该功能启动通过调用alert(someglobal)为什么一个函数抛出一个不确定的问题,其他的呢?

Answer 1:

someF创建一个新的名为(局部范围)可变someGlobal (这掩盖了全球someGlobal )和值分配给它。 它不触及全球someGlobal (因为没有与范围同名的另一个变量虽然不能访问它)。

var语句悬挂,所以someGlobal被屏蔽所有someF (不仅仅是后var语句)。 当地的价值someGlobalundefined ,直到一个值分配给它。

someF2访问原始(不变)全球someGlobal



Answer 2:

既然你声明一个局部变量具有相同的名称。 因此,它的值赋给局部变量。 只是删除从VAR someGlobal在someF()的变种,它应该是罚款。

var someGlobal = 3;

function someF() {
    // undefined issue
    alert(someGlobal);
    someGlobal = 5; // <-- orignially var someGlobal = 5
    // Displays 5
    alert(someGlobal);
}

function someF2() {
    // Should display 5 now
    alert(someGlobal);
}

someF();
someF2();


Answer 3:

someF2显示3,因为它仍然 3。

在someF()创建恰好具有相同的名称作为someGlobal一个新的变量。 这并不做任何事情,原来someGlobal,它只是创建了一个新的变量局部发挥作用someF即会消失,当该功能结束。

所以,你有局部变量(如内部someF创造了VAR)和全球性的。



Answer 4:

下面是如何使用这两种内局部和全局变量的例子someF通过使用this

var someGlobal = 3;

function someF() {

    // Displays 3
    alert(someGlobal);
    this.someGlobal = 5;
    someGlobal = 5;
    // Displays 5
    alert(this.someGlobal);
}

function someF2() {
    // Displays 5
    alert(someGlobal);
}

someF();
someF2();



文章来源: Javascript global variable scope issue