【问题标题】:block scope influencing declarations outside of it [duplicate]影响其外部声明的块范围[重复]
【发布时间】:2022-08-04 07:51:21
【问题描述】:

<p id=\"Test1\"></p>
<p id=\"Test2\"></p>
<p id=\"Test3\"></p>

<script>
    {
        let v;
        v = 10;
    }

    let g = 20;

    var h = 15;

    document.getElementById(\'Test1\').innerHTML = v;
    document.getElementById(\'Test2\').innerHTML = g;
    document.getElementById(\'Test3\').innerHTML = h;
</script>

据我所知, let 声明的变量不能在阻塞范围之外使用,但是如果我运行上面的代码,这 3 个都没有显示?这是为什么?范围到此为止吧?

  • 它会引发错误,因为 v 未定义,正是因为它是块作用域。 (如果您最后使用v 进行更新,您将看到gh 在引发错误之前更新)

标签: javascript


【解决方案1】:

当发生错误时,JavaScript 通常会停止并生成错误消息。对此的技术术语是:JavaScript 将抛出异常(抛出错误)。 JavaScript 实际上会创建一个带有两个属性的 Error 对象:name 和 message。 **所以这里只要编译器尝试显示“v” js 编译器抛出错误 **

  • 未捕获的引用错误:未定义 v 它会终止执行,因此您看不到 g 和 h 的值。 这里有两种情况: ** 情况1** 注释“v”时,您可以看到 g 和 h 的值(控制台中没有错误)。
    let g = 20;
    
    var h = 15; {
    
      let v;
      v = 10;
    }
    
    
    //document.getElementById('Test1').innerHTML = v;
    document.getElementById('Test2').innerHTML = g;
    document.getElementById('Test3').innerHTML = h;
    <p id="Test1"></p>
    <p id="Test2"></p>
    <p id="Test3"></p>

** 案例 2** ** 我最后一次尝试访问 v 值,所以现在您可以看到 g 和 h 的值,因为它在编译器抛出错误之前执行。

let g = 20;

var h = 15; {

  let v;
  v = 10;
}



document.getElementById('Test2').innerHTML = g;
document.getElementById('Test3').innerHTML = h;
document.getElementById('Test1').innerHTML = v;
<p id="Test1"></p>
<p id="Test2"></p>
<p id="Test3"></p>

JavaScript 是一种单线程语言,一次只执行一个命令。它有一个同步执行模型,每行从上到下逐行执行。

单位,除非有来的功能,如设置超时或者异步的功能。执行方式不同。

【讨论】:

    猜你喜欢
    • 2017-12-02
    • 2015-12-14
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多