[javascript] JavaScript 예약 키워드가 변수 이름으로 허용되는 이유는 무엇입니까?

우리는 알고 letA는 예약 된 자바 스크립트에서 변수를 정의하는 키워드.

var let = 2;
console.log(let); // return 2

그렇다면 왜 이것이 오류가 아닌가?



답변

let 엄격 모드에서 예약어입니다.

'use strict';
var let = 5;

Uncaught SyntaxError : 예기치 않은 엄격한 모드 예약어

브라우저는 일반적으로 이전 버전과의 호환성을 우선적으로 고려하기 때문 입니다. letES2015에 도입 되었지만 (그리고 그 이전에는 그 사용이 예상 되었지만 ) let변수 이름으로 사용 된 이전 스크립트 는 원하는대로 계속 작동합니다. 예를 들어, 스크립트가 2008 년에 작성된 경우 :

var let = 2;
console.log(let);

그런 다음 2020 년에도 계속 작동 할 것입니다.

매우 유사한 이유로, async그리고 await또한 변수 이름으로 허용 .

let엄격 모드-엄격 모드에서 오류를 사용하는 이유는 2009 년에 ES5에 도입되었습니다. 당시 언어 설계자들은 변수를 선언하기 위해 새 키워드를 사용하는 것이 미래에는 가능하다는 것을 알았습니다. 아직 돌로 설정되지 않았으며 ES6는 아직 멀었습니다. ES5가 나오면 스크립트 작성자는 코드를 혼동하지 않고 자동 오류를 명시 적 오류로 변경하기 위해 엄격 모드를 선택할 수 있습니다. 하지만이 let변수 선언에 사용할 수 없었다 아직 엄격 모드에서 변수 이름의 가독성 향상으로 금지, 미래 엄격 모드로 선택했다 스크립트를 또한 기존의 스크립트를 차단하지 않으면 서,.


답변

let다른 작품 중 일부는 엄격 모드에서만 예약어 역할을합니다. 사양은 말한다

엄격 모드에서 허용되지 않는 : 문맥 엄격 모드 코드에서 식별자로 허용되는 경우 : let, static, implements, interface, package, private, protected, 그리고 public;

let엄격 모드에서만 허용되지 않는 단어 목록 내부 를 볼 수 있습니다 . let변수 이름으로 사용하기 위해 오류를 발생 시키려면 엄격 모드를 사용할 수 있습니다

"use strict";
var let = 3


답변

‘엄격한 사용’;

오류가 발생합니다. webpack, grunt와 같은 번들 도구를 사용하여 코드를 컴파일하십시오.


답변