2017-11-16 8 views
3

undefinedwith으로 처리되며 null은 수신 할 수없는 이유는 무엇입니까? 또한 var은 (오류를 던질 수) 반면 let은 덮을 수 있습니다.null이 허용되지 않는 이유는 무엇입니까?

그래서 변수를 재정의 할 수있는 규칙은 무엇입니까?

+1

여기에 코드를 입력하십시오. 우리가 당신을 도울 수없는 다른 지혜 .. –

답변

2

undefined 미리 정의 된 글로벌 식별자이므로

var obj = {null:1,undefined:2}; 
 
with(obj) console.log(null,undefined);

enter image description here

하지만 null 리터럴이다. varkeyword이지만 let은 아닙니다 (느슨한 모드에서는 strict mode에 있음). (느슨한 모드에서는 표시되는 위치에 따라 키워드 또는 식별자와 같은 역할을합니다.)

undefined은 키워드가 아닌 미리 정의 된 글로벌 주소입니다. 그 이유는 let이 strict 모드의 키워드 일 뿐이 기 때문입니다. 언어가 처음 정의 된 후 20 년 만인 2015 년에 추가 된 것입니다.

+0

재미있는 버그로 이어질 수있는 undefined (로컬)을 재정의 할 수도 있습니다 : http://jsbin.com/sesisogico/edit?js,console – amcdrmtt

+1

나는'let' is isn 키워드가 아닙니다. 분명히'var let = 1'은 유효한 JavaScript입니다. 이전 버전과의 호환성을 유지하기 위해 그렇게 했습니까? –

+3

@Derek 朕 會 功夫 : 예, 'let'은 느슨한 모드 코드에서만 식별자로 허용됩니다. strict 모드 코드에서'var let = 1'은 실패합니다. 새로운 키워드는 어쩔 수없이 이상적으로 만 문맥 적으로 추가됩니다 ('await'는'async' 함수 내의 키워드 일뿐입니다, 예를 들어'async'는 전혀 키워드가 아니며 단지 구문 적으로 정확한 위치), 그리고 영향의 범위를 결정하기 위해 야생에서 코드를 광범위하게 조사한 후에 만 ​​가능합니다. –