2015-06-08 4 views
5
  1. Is блока Объем иногда такой же, как области видимости функции? Я знаю функция scope для всего, что находится внутри функции, но не получить то, что точно область области есть.
  2. Для Javascript, это в настоящее время рекомендуется использовать let/const вместо var для будущего обслуживания? (Это было от Airbnb Style Guide)

ответ

2

Я не уверен, что вы действительно получили ответили еще на ваши вопросы:

блочно объем иногда такой же, как область видимости функции? Я знаю, что область функций предназначена для всего, что есть внутри функции, но не получает то, что точно в объеме блока.

Да, блок-сфера иногда такой же, как область видимости функции. Область блока - это все внутри набора фигурных скобок { a block scope here }. Таким образом, в верхней части коды есть функция, блочный сфера будет таким же, как область видимость функции:

function test(x) { 
    // this is both a block scope and a function scope 
    let y = 5; 
    if (x) { 
     // this is a smaller block scope that is not the same as the function scope 
     let z = 1; 
    } 
} 

Для Javascript, является в настоящее время рекомендуется использовать пусть/Const вместо из вара для дальнейшего обслуживания ? (Это из Airbnb руководства по стилю)

let и const являются частью новейшей спецификации ES6 и реализуется только в последних системах Javascript, а иногда в самых последних двигателях они разрешены только со специальными флагами. Они приходят ко всем новым JS-механизмам/браузерам, но пока еще не развернуты. Таким образом, если вы пишете Javascript для обычного использования браузером в широком Интернете, вы не можете надежно использовать let и const.

Есть некоторые случаи, когда вы можете спокойно программировать с let и const Сейчас:

  1. Если вы ориентируетесь только конкретный двигатель Javascript, и вы знаете, что он поддерживает эти функции (например, конкретный версия nodejs или подключаемый модуль только для определенной версии конкретного браузера).

  2. Если вы используете транспилер, который преобразует ваш код в код, который будет работать во всех браузерах. При использовании транспилятора вы можете написать свой код, используя новейшие функции, и транспилятор будет «заглушить», чтобы ваш код работал в старых браузерах, используя симуляции новых функций.

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

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


AirBnb Style Guide вы связаны с специально написана для среды ES6 (обратите внимание, что отдельная ссылка для версии ES5 их стиль руководства). Таким образом, это означает, что они предполагают среду, поддерживающую ES6. Это либо потому, что они нацелены на серверный JS-движок, который, как они знают, поддерживает ES6, или потому, что они используют транспилятор, который преобразует код ES6 во что-то, что будет работать на двигателе ES5.


Примечание о транспилерах. Прежде чем использовать транспилятор и переключив все объявления переменных на let в пределах блоков, стоит понять, какой код генерирует транспилятор и вне зависимости от того, генерирует ли он дополнительный код, что влияет на производительность вашего приложения.Например, область блока для let моделируется путем создания встроенного IIFE, который может привести к дополнительным служебным нагрузкам во время выполнения для каждого блока, который содержит оператор let. Я не говорю, что это обязательно плохо, что должно препятствовать вам использовать транспилер, но при принятии решения о том, следует ли использовать транспилер, я бы посоветовал вам внимательно ознакомиться с тем, как выглядит преобразованный код для множества ES6 чтобы вы знали, является ли он правильным инструментом для любой работы, которую вы имеете или только для некоторых заданий.

7
  1. Javascript-не использует заблокированную сферу он использует цепочечную сферу. основное отличие состоит в том, что вы не можете получить доступ к переменной вне области действия, если только вы не сделаете ее глобальной. ES 6 блокирует область, когда вы объявляете переменную с let.
  2. В настоящее время рекомендуется использовать var, поскольку ES 6 не поддерживается полностью.
+0

Есть ли предполагаемая дата выпуска ES6? Интересно, почему Airbnb рекомендовал использовать стандарт ES6 на ранней стадии. – chenghuayang

+1

@ChenghuaYang: В течение нескольких лет были рассчитаны даты выпуска для спецификации ES6 *. Я думаю, что в какой-то момент это должно было быть сделано в 2012 или 2013 году. В последнее время я слышал, что да, они ожидали, что это будет в этом году. Но тогда, конечно же, вам придется ждать, пока поставщики поддержат его, и чтобы люди обновили свои браузеры. Что касается Airbnb, ну, может быть, они трансбиллируют, или, может быть, они просто подталкивают повестку дня. –

+1

@ChenghuaYang Airbnb команды уже имеют код ES6, но они используют транспилер (например, [Traceur] (https://github.com/google/traceur-compiler) или [Babel] (http://babeljs.io/)), чтобы перейдут на ES5, чтобы их код можно было использовать в современных браузерах. – laruiss

3

Является ли область блока иногда такой же, как функция scope? Я знаю, что область функций предназначена для всего внутри функции, но не понимает, что такое область блока.

Блок сфера все в стороне блок, например .:

function foo() { 
    // function scope 
    if (condition) { 
     // block scope 
    } 
} 

вверх через 5-е издание спецификации, JavaScript не имеет блок сферы. Следующая спецификация (ECMAScript 6, aka «ES6»), которая почти завершена, добавляет область блока через let и const.

Для Javascript, является в настоящее время рекомендуется использовать let/const вместо вара для дальнейшего обслуживания?

Это зависит только от вас. let и const - это новые инструменты, которые вы можете добавить в свой пояс. Они не имеют, чтобы заменить var, если вы этого не хотите. Тем не менее, вы слышите: «let - это новый var».

Переменные, объявленные с let, имеют размер блока, объявленные var.

Отметьте, что let и constdon't have great support in the wild yet. Не удивительно, что добавление области блока к движку, который никогда не имел его раньше, по-видимому, нетривиальным. Вы можете использовать транспилер, как Babel, или просто продолжайте использовать var.

Смежные вопросы