English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Sappiamo tutti che quando scriviamo codice JavaScript possiamo definire variabili globali e locali con var, e possiamo anche omittere var, senza che vengano segnalati errori nel modo non strettamente controllato, ma non sappiamo la differenza tra le due...
var x = 1; y = 4; console.log(x); // 1 console.log(y); // 4 console.log(window.x); //1 console.log(window.y); // 4
Un semplice test può far capire che le variabili definite x e y sono state montate sull'oggetto window, diventando attributi di window, il che non può significare nulla...
delete x; delete y; console.log(window.x); //1 console.log(window.y); //undefined
Guardiamo cosa succede dopo l'esecuzione del codice, l'property x non è stato cancellato, mentre y è stato cancellato, ecco la differenza
Le variabili definite con var non possono essere cancellate con delete, qual è la ragione? Nello standard ECMAScript 5, è possibile ottenere le informazioni di un property di un oggetto utilizzando Object.getOwnPropertyDescriptor():
console.log(Object.getOwnPropertyDescriptor(window,"x")); console.log(Object.getOwnPropertyDescriptor(window,"y"));
Riceviamo le seguenti informazioni:
Quando non si definisce una variabile con var, la proprietà predefinita configurable è true e può essere eseguita la comando come delete, mentre quando var definisce una variabile globale, configurable diventa false, ossia non può essere cancellato con delete.
Inoltre, parliamo brevemente del problema della promozione delle variabili
alert(a);//Non catturato ReferenceError: a non è definito a = 100; alert(b); //undefined
var b = 200; Parliamo del secondo pezzo di codice, la variabile globale b dichiarata con var in js subirà la promozione delle variabili, ossia var b = 200; sarà diviso in var b; b = 200; Durante la fase di parsing, var b; sarà promosso all'inizio e una spazio in memoria sarà allocato, poiché b non è assegnato, il valore predefinito è undefined. Nel primo pezzo di codice, quando js esegue la funzione alert(), poiché non è stata effettuata la dichiarazione var, la variabile non è stata promossa, non c'è stata alcuna allocazione di memoria, quindi durante l'alert viene segnalato un errore!
In lo standard ECMAScript 6, un concetto importante è "modalità strict JavaScript", che deve essere aggiunto all'inizio con "use strict";
Punti di attenzione per let:
1. let ha un ambito bloccante, ogni {} è un ambito
2. let non ha la promozione delle variabili nel suo ambito
3. let non può essere dichiarato nuovamente nel suo ambito (ambito di funzione e bloccante)
Punto 1: l'ambito bloccante di let
Attenzione: il seguente codice viene eseguito in modalità strict.
let n = 10; if(true){ let n = 50; } console.log(n); //10 indica che il blocco esterno non è influenzato dal blocco interno, se n è definito con var, allora viene stampato 50.
Punto secondo: problema di elevazione delle variabili
alert(a);//Non catturato ReferenceError: a non è definito let a = 100;
var e let non esistono problemi di elevazione delle variabili, la scrittura sopra genererà direttamente un errore.
Punto terzo: problema di dichiarazione duplicata
(function(){ let lTest = "let"; var vTest = "var"; let lTest = "let changed";//Non catturato SyntaxError: Identifier 'lTest' è già stato dichiarato var vTest = "var changed"; console.log(lTest); console.log(vTest); })();
Non è permesso dichiarare una variabile più di una volta nello stesso scope con let. Altrimenti, verrà generato un errore diretto!!!
Comando const
const viene usato per dichiarare costanti, una volta dichiarate, il loro valore non può essere modificato. Se cerchi di modificare il valore di una variabile, JavaScript non genererà un errore, ma semplicemente non avrà alcun effetto.
L'ambito di const è lo stesso di let, è efficace solo nel blocco di scope in cui è dichiarato e, come let, non può essere dichiarato più volte.
Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, è di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.