2015-08-15 17 views
16

Che cosa è esattamente la differenza tra l'utilizzo di entrambi i 'var' o 'lasciare' a macchina? So che "let" consente alla variabile di essere ulteriormente definita in un ambito senza che venga utilizzata al di fuori di tale ambito. Questo è ovviamente un bel vantaggio per gli iteratori nei loop. So che questa è una definizione ES6, quindi la compilazione su ES6 dovrebbe apparire quasi identica in termini di "var" e "let".'var' e 'lasciare' in tipografico 1.5

Ma, quando compila giù in ES5 javascript che non supporta 'let', cosa sta succedendo esattamente? Ci sono variabili con nomi strani che il compilatore crea in modo tale da impedire l'utilizzo di dette variabili nel contesto del file Typescript? Cosa succede nelle situazioni in cui definite molte variabili "let" in una funzione? C'è un impatto sulle prestazioni di cui dovrei preoccuparmi?

Fondamentalmente, cosa sta succedendo quando la compilazione di dattilografi lascia le variabili su ES5 javascript?

+3

Non penso che questa sia una buona domanda per Programmers.SE: questo sito riguarda concetti di sviluppo software, ma stai chiedendo dettagli specifici sull'implementazione di una particolare lingua. Se sei interessato a come i compilatori in generale potrebbero implementare lo scope lessicale, potrebbe trattarsi di un argomento qui (ma probabilmente troppo ampio). Poiché stai essenzialmente chiedendo di uno strumento di programmazione, sto votando per migrare a Stack Overflow, che sembra essere più adatto a questo tipo di domande. – amon

+1

Penso che questa sia una grande domanda. – MarzSocks

risposta

19

Il modo più semplice per trovare risposte a questo tipo di domande per provarlo nello TypeScript Playground.

TypeScript rinomina le variabili nell'ambito del blocco. Non ci sono overhead delle prestazioni rispetto all'utilizzo di variabili regolari definite con var.

Questo codice:

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

Compila a:

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

Here qualche informazione in più per quanto riguarda let.

+2

Hai ragione, questo è probabilmente il modo migliore di scavare in qualcosa del genere. È interessante notare che, se provi a lanciare in una var i_1, questo farà automaticamente entrare in i_2. Abbastanza carino –