что это за анонимный блок в javascript ES6? - PullRequest
2 голосов
/ 28 апреля 2020

Я читаю о новых возможностях 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()

Ответы [ 3 ]

3 голосов
/ 28 апреля 2020

Анонимные блоки полезны при использовании переменной let. Переменные, объявленные ключевым словом var, попадают в непосредственное тело функции, а переменные let - в непосредственный включающий блок, обозначенный {}.

1 голос
/ 28 апреля 2020

С документы :

Оператор блока часто называется составной оператор на других языках. Это позволяет вам использовать несколько операторов, где JavaScript ожидает только один оператор. Объединение операторов в блоки является обычной практикой в ​​JavaScript. Обратное поведение возможно при использовании пустого оператора, где вы не предоставляете оператор, хотя он и требуется.

Блоки обычно используются в сочетании с операторами if...else и for.

По вашему примеру:

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 , поскольку он может быть объявлен уникально в пределах блока.

1 голос
/ 28 апреля 2020

Это просто голый блок. Каждый раз, когда вы сталкиваетесь с голым блоком, вы можете считать его эквивалентным:

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

или

if (true) {
  // block contents here
}

В этом нет ничего особенного и редко используется. Вероятно, наиболее важной его частью является то, как переменные const и let, объявленные в ней, имеют область видимости только для блока , а не для внешней функции.

Он имеет то же самое такое же поведение, как и у всех нефункциональных блоков в Javascript - точно так же, как у блока if, или у блока while, или у блока for, за исключением того, что нет условий для его ввода, и он выполняется ровно один раз .

...