【问题标题】:Javascript: scope of variableJavascript:变量范围
【发布时间】:2020-02-07 06:55:15
【问题描述】:

对于一个函数,它是在声明期间还是在运行时之前获得变量范围?

我尝试了下面的第一部分代码,但它不起作用。第二部分有效。有人可以对差异有所了解吗?

//// does not work
function a() {
    console.log(v1);
}

function b() {
    let v1 = 1;
    a();
}

b();

//// does work

function a() {
    console.log(v1);
}

function b() {
    a();
}

let v1 = 1;
b();

【问题讨论】:

标签: javascript variables scope


【解决方案1】:

好的,让我们看看这个:

//// does not work
function a() {
    console.log(v1);
}

function b() {
    let v1 = 1;
    a();
}

b();

在上面的 sn-p 代码中,您有 2 个函数(a()b())并调用方法 b() 来自您的“主要”功能(未命名但在那里)。在 a() 中,您尝试从 b() 直接访问局部范围的变量 - 这是您无法做到的。

//// does work

function a() {
    console.log(v1);
}

function b() {
    a();
}

let v1 = 1;
b();

所以在这段代码的 sn-p 中,你也有 a()b() - 以及一个变量 v1 .由于这是在公共空间中声明的(在调用 b() - 然后调用 a() 之前),它也可以在您调用的方法中使用。 p>

【讨论】:

    【解决方案2】:

    let 关键字给出了一个变量块级作用域,这意味着b() 中的v1 变量只能在b() 中使用。 a() 不知道v1 是什么。

    //// does not work
    function a() {
        console.log(v1);
    }
    
    function b() {
        let v1 = 1;
        a();
    }
    
    b();
    

    在本例中,v1 被设置在全局范围内,因此您的所有函数都会识别它。

    //// does work
    
    function a() {
        console.log(v1);
    }
    
    function b() {
        a();
    }
    
    let v1 = 1;
    b();
    

    【讨论】:

      猜你喜欢
      • 2012-12-23
      • 2011-05-10
      • 2011-07-07
      • 2011-03-03
      • 2013-01-16
      • 2011-05-26
      相关资源
      最近更新 更多