LET 및 CONS가 선언 한 변수는 코드 블록 내에서만 유효합니다.
{a = 10; var b = 1;} a // referenceError : a가 정의되지 않았습니다 .B // 1가변 프로모션이 없습니다
선언 후 변수를 사용해야합니다. 그렇지 않으면 오류 가보고됩니다.
var tmp = 123; if (true) {tmp = 'abc'; // referenceErrorlet tmp;}반복 된 진술은 허용되지 않습니다
// 오류 함수 () {a = 10; var a = 1;}블록 레벨 범위
function f () {console.log ( '나는 외부!'); } (function () {if (false) {// 함수 함수 f () {console.log ( 'I Am!');}} f ();} ()); // 내부에 있습니다! ES5 기능 프로모션 // 나는 외부에 있습니다! ES6 블록 수준 범위const 명령
읽기 전용 상수를 선언하십시오. 일단 선언되면 상수의 값을 변경할 수 없습니다.
변수가 선언되면 즉시 초기화되어야하며 나중에 할당 할 수 없습니다.
LET Command, Const Command 및 Class Command가 선언 한 글로벌 변수는 글로벌 오브젝트의 속성에 속하지 않습니다.
var a = 1; // Node의 REPL 환경에서 Global.a // 또는 일반 메소드를 사용할 수있는 경우 this.awindow.a // 1let b = 1; window.b // undefined로 쓸 수 있습니다.
다음으로 ES6의 Const 명령을 별도로 소개하겠습니다.
항상 ECMA를 중심으로 한 JS는 상수의 개념을 가지고 있지 않았으며 ES6은 이러한 결함을 보완했습니다.
const foo = 'foo'; foo = 'bar'; // typeerror : 상수 변수에 대한 할당.
위의 예는 기본 유형의 상수를 선언합니다. 초기 값을 수정하려고하면 오류 가보고됩니다. 참조 유형의 값 인 경우 적용되지만 한 가지주의를 기울여야합니다.
const foo = []; foo = [1]; // 상수 변수에 대한 할당.
정상 오류, 문제 없음, 다시보십시오.
const foo = [1,2,3]; foo [1] = 4; console.log (foo) // [1, 4, 3]
이것에 오류가없는 이유는 무엇입니까? 그리고 성공적으로 수정할 수 있습니까? 이 두 가지 예의 차이점은 전자가 포인터의 해당 내용을 변경했으며 (JS 참조 유형에 익숙해야 함) 후자는 아직 포인팅을 변경하지 않았지만 포인팅 객체의 내용이 변경되었다는 것입니다. Foo에게는 해당 객체를 가리키는 포인터 일뿐입니다. 객체 내용에 관해서는 비즈니스에 신경 쓰지 않으므로 수정할 수 있습니다. 콘텐츠가 변경되기를 원하지 않으면 다른 방법을 사용할 수 있습니다.
const foo = object.freeze ([1,2,3]); foo [1] = 4; console.log (foo) // [1, 2, 3]
이렇게하면 수정 될까 걱정할 필요가 없습니다.