다음과 같이
var a = 3;
실제로는 두 단계가 있습니다.
1 a를 정의되지 않은 상태로 초기화
2 값 3을 할당
따라서 " 믿을 수 없는 일이 일어나는 현상, 즉 JS에서는 변수를 먼저 사용한 후 선언할 수 있다는 것입니다. 이는 Java에서는 허용되지 않습니다.
System.out.println(a);
int a = 1;
컴파일이 실패합니다. 하지만 JS에서는 다음과 같이 할 수 있습니다.
alert(a);
var a;
정의되지 않았지만 오류는 보고되지 않습니다. 이는 a가 실제로 선언되었으며 정의되지 않았음을 보여줍니다.
"var a" 없이 "alert(a)"만 있는 경우 JS 엔진은 오류를 보고합니다.
alert(a);
FF와 같이
을 먼저 사용한 후 선언할 수 있지만 이렇게 하면 할당 효과가 잃어버린. 다음과 같습니다
alert(a);
var a = 1;
이번에는 출력이 1이 아닌 여전히 정의되지 않았습니다.
또 다른 예,
alert('a' in window); // true
var a;
alert 이후에 코드가 공식적으로 작성되었지만 엔진은 여전히 var 선언을 자동으로 처리합니다. 첫 번째 . 최종 출력은 true입니다.
이것을 이해하고 나면 다음 코드의 결과를 이해하는 것은 어렵지 않습니다.
if (!("a" in window)) {
var a = 1;
}
경고(a);