【问题标题】:what is this anonymous block in javascript ES6?javascript ES6 中的这个匿名块是什么?
【发布时间】:2020-08-11 20:14:46
【问题描述】:

我正在阅读来自 pragmatists 的新 ES6 功能。但是在这里你可以看到他们在那个函数中使用了一个匿名块。 有人可以解释一下这是什么意思。它是任何javascript对象还是什么?我们如何使用它?还请提及一些参考。

function f() {
  var x = 1
  let y = 2
  const z = 3
  {
    var x = 100
    let y = 200
    const z = 300
    console.log('x in block scope is', x)
    console.log('y in block scope is', y)
    console.log('z in block scope is', z)
  }
  console.log('x outside of block scope is', x)
  console.log('y outside of block scope is', y)
  console.log('z outside of block scope is', z)
}

f()

【问题讨论】:

  • 它只是一个块(语句),用于“let”的组织和范围。自 JS 诞生以来,该语法就一直存在,尽管自引入“let”以来最有用。 “var”的范围是总是函数的范围。搜索“javascript 变量提升”。
  • 很明显,块用于范围变量。只需检查输出值,您就会明白。

标签: javascript ecmascript-6 block


【解决方案1】:

匿名块在使用 let 变量时很有帮助。由var 关键字声明的变量的作用域是直接函数体,而let 变量的作用域是由 { } 表示的直接封闭块。

【讨论】:

    【解决方案2】:

    这只是一个光秃秃的街区。任何时候你遇到一个裸块,你可以认为它相当于:

    for (let i = 0; i < 1; i++) {
      // block contents here
    }
    

    if (true) {
      // block contents here
    }
    

    没什么特别的,也很少使用。其中最重要的部分可能是其中声明的constlet 变量的作用域仅限于块,而不是外部函数。

    它与 Javascript 中的所有非功能块具有相同的行为 - 就像 if 块,或 while 块,或 for 块,除了没有条件进入它,它只执行一次。

    【讨论】:

      【解决方案3】:

      来自docs

      块语句在其他语言中通常称为复合语句。它允许您在 JavaScript 只需要一个语句的情况下使用多个语句。将语句组合成块是 JavaScript 中的常见做法。使用空语句可能会出现相反的行为,您不提供任何语句,但需要提供。

      块通常与if...elsefor 语句关联使用。

      根据您的示例:

      function f() {
        const z = 3
        
          const z = 300
        
        console.log('z outside of block scope is', z)
      }
      
      f()

      如果不使用块作用域,我们会得到如下错误:

      SyntaxError: 重新声明 const z

      还有块作用域:

      function f() {
        const z = 3
        {
          const z = 300
          console.log('z in block scope is', z)
        }
        console.log('z outside of block scope is', z)
      }
      
      f()

      相同的代码可以正常工作。请注意,块范围的 const z = 300 不会抛出 SyntaxError,因为它可以在块内唯一声明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-14
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 1970-01-01
        相关资源
        最近更新 更多