Maison  >  Article  >  php教程  >  Une explication détaillée des commandes ES6 let et const

Une explication détaillée des commandes ES6 let et const

高洛峰
高洛峰original
2016-12-29 13:20:211190parcourir

Les variables déclarées par let et const ne sont valables qu'à l'intérieur du bloc de code

{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

Il n'y a pas de promotion de variable

La variable doit être en cours d'utilisation après la déclaration, sinon une erreur sera signalée

var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}

Les déclarations répétées ne sont pas autorisées

// 报错
function () {
let a = 10;
var a = 1;
}

Portée au niveau du bloc

function f() { console.log('I am outside!'); }
(function () {
if(false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}());
//I am inside! ES5 函数提升
//I am outside! ES6 块级作用域

commande const

déclare une constante en lecture seule. Une fois déclarée, la valeur de la constante ne peut pas être modifiée

Une fois qu'une variable est déclarée, elle doit être initialisée immédiatement et ne peut pas être laissée pour une affectation ultérieure

Variables globales déclarées par la commande let, la commande const et la commande class n'appartiennent pas à l'objet global Attributs

var a = 1;
// 如果在Node的REPL环境,可以写成global.a
// 或者采用通用方法,写成this.a
window.a // 1
let b = 1;
window.b // undefined

Laissez-moi vous présenter la commande const d'ES6 séparément

Il n'y a toujours pas eu de constante dans js avec ecma comme concept de base, es6 compense ce défaut

const foo='foo';
foo='bar';//TypeError: Assignment to constant variable.

L'exemple ci-dessus déclare une constante d'un type de base. Si vous essayez de modifier la valeur initiale, il signalera une erreur ; s'il s'agit d'une valeur de type référence, la même chose s'applique, mais il y a une chose à noter par exemple : <.>

const foo=[];  
foo=[1];//Assignment to constant variable.

Signaler une erreur normalement, rien à redire, regardez encore :

const foo=[1,2,3];
foo[1]=4;
console.log(foo)//[1, 4, 3]

Pourquoi cela ne signale-t-il pas d'erreur ? Et la modification peut-elle réussir ? La différence entre ces deux exemples est que le premier a modifié le pointeur (vous devez être familier avec les types de référence js) et le contenu correspondant a changé, tandis que le second ne pointe pas vers le même mais le contenu de l'objet a changé. Pour foo, c'est juste qu'un pointeur se charge de pointer vers l'objet correspondant. Quant au contenu de l'objet, cela n'a pas d'importance pour moi, donc il peut être modifié si vous ne voulez pas que le contenu change, vous le faites. peut utiliser une autre méthode ;

const foo=Object.freeze([1,2,3]);
foo[1]=4;
console.log(foo)//[1, 2, 3]

De cette façon, vous n'avez pas à vous soucier d'être modifié

Pour plus de détails ; articles sur les commandes let et const dans ES6, veuillez faire attention au site Web PHP chinois !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn