2015-05-13 6 views
1

Теперь, когда мы можем написать ES6 и развернуть его в браузерах (используя Traceur или 6to5 для поддержки устаревших пользовательских агентов), есть ли причина, по которой мы бы не использовали let или const в качестве наших ключевых слов по умолчанию для объявления переменных?Есть ли причина, по которой я не буду использовать «let»?

var мейн? И если это так, могу ли я настроить свои инструменты для литья, чтобы отвергнуть его?

+1

Совместимость со старыми двигателями? – thefourtheye

+0

Существует предварительное обсуждение этой точной темы здесь, в StackOverflow, но я не могу найти ее в данный момент. – jfriend00

+0

@thefourtheye - есть ли недостатки в транспилерах, таких как 6to5 с этими ключевыми словами? Разумеется, они должны просто обменять const и позволить нашим для «var»? –

ответ

2

Поскольку у es5 есть только область возможностей для переменных, предположительно, ваш транспилер создает замыкания, чтобы издеваться над функциональностью ключевого слова let. Это может повлиять на результирующий размер вашего кода, если вы объявляете переменные внутри областей, которые не являются функциями (например, циклы, ifs и т. Д.). Так что это одна из причин не в настоящее время. Это может также сделать отладку несколько более запутанной, хотя это можно было бы смягчить с помощью sourcemaps.

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

0

Это зависит от среды:

  • Если вы пишете код на стороне сервера JavaScript (Node.js), вы можете смело использовать let заявление.

  • Если вы пишете код JavaScript на стороне клиента и используете транспилер, такой как Traceur, вы можете безопасно использовать оператор let, однако ваш код, скорее всего, будет чем-то оптимальным в отношении производительности.

  • Если вы пишете код JavaScript на стороне клиента и не используете транспилер, вам необходимо рассмотреть поддержку браузера.

    Сегодня, 23 февраля 2016, вот некоторые браузеры, которые либо не поддерживают let или имеют лишь частичную поддержку:

    • Internet Explorer 10 и ниже (без поддержки)
    • Firefox 43 не и ниже (без поддержки)
    • Сафари 9 и ниже (без поддержки)
    • Opera Mini 8 и ниже (без поддержки)
    • Android-браузер 4 и ниже (без поддержки)
    • опера 36 и ниже (частичная поддержка)
    • Chome 51 и ниже (частичная поддержка)

для уточненного обзора которого браузеры поддерживают заявление Пусть в момент вашего чтения этого ответа, см this Can I Use page.

1

Время от времени let не разрешает шаблон изображения с именованной функцией. Это происходит в Chrome 51, но не в Safari 9.1.1.Таким образом,

let foo = func; 

function func() { 
    return true; 
} 

высказал ошибку. В то время как следующий стиль действует:

var foo = func; 

function func() { 
    return true; 
} 

В зависимости от ваших целей, это может сделать ваш код более или менее читаемым. Например, шаблон модуля выставления, который имеет много кода инициализации, поэтому не возвращается сразу.

var foo = (function() { 
    let factory = { 
     func: func 
    }; 

    init(); 
    // do more init stuff 

    return factory; 

    function func() { 
     // 
    } 
}()); 

Using function declarations to hide implementation details, for example.

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