2015-08-15 2 views
16

В чем разница между использованием «var» или «let» в машинописном машиностроении? Я знаю, что «пусть» позволяет определять переменную далее в область без ее использования за пределами указанной области. Это, очевидно, хорошее преимущество для итераторов для циклов. Я знаю, что это определение ES6, поэтому компиляция на ES6 должна выглядеть почти идентичной с точки зрения «var» и «let».«var» и «let» in Typcript 1.5

Но когда он скомпилирован в javascript ES5, который не поддерживает «let», что именно происходит? Существуют ли странные имена переменных, которые создает компилятор, чтобы предотвратить использование указанных переменных в контексте файла машинописных файлов? Что происходит в ситуациях, когда вы определяете множество переменных «let» во всей функции? Есть ли влияние на производительность, о котором я должен беспокоиться?

В основном, Что происходит, когда машинопись машинописного текста допускает переменные на ES5 javascript?

+3

Я не думаю, что это хороший вопрос для Programmers.SE: этот сайт посвящен концепциям разработки программного обеспечения, но вы спрашиваете о конкретной детали реализации конкретного языка. Если вам будет интересно, как компиляторы вообще могут реализовать лексическую область, это может быть здесь по теме (но, возможно, слишком широко). Поскольку вы по существу спрашиваете о программном инструменте, я голосую, чтобы перейти на Stack Overflow, который, кажется, лучше подходит для такого рода вопросов. – amon

+1

Я думаю, что это отличный вопрос. – MarzSocks

ответ

19

Самый простой способ найти ответы на эти вопросы, чтобы опробовать его в TypeScript Playground.

ТипScript переименовывает переменные в пределах области блока. Накладных расходов нет, по сравнению с использованием обычных переменных, определенных с помощью var.

Этот код:

var i = 0; 
for (let i = 0; i < 5; i++) {} 
i++; 

компилирует:

var i = 0; 
for (var i_1 = 0; i_1 < 5; i_1++) { } 
i++; 

Here еще немного информации о let.

+2

Вы правы, это, наверное, лучший способ вникать в нечто подобное. Интересно также, если вы попытаетесь выбросить var i_1, он автоматически сделает let в i_2. Спрятано. –

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