2012-04-11 4 views
6

javascriptwindow은 전역 객체이므로 전역 범위의 모든 객체는 window의 하위입니다.ReferenceError 및 전역 객체

console.log(window.foo); // No error, logs "undefined". 
console.log(foo);  // Uncaught ReferenceError: foo is not defined. 

Fiddle

그 두 라인들이 안, 동일해야합니다 : 그래서 내가 왜 이런 결과를 얻을?

답변

17

window.foo으로 명시 적으로 후자의 경우에는 window 개체 인 foo 속성을 찾고 있습니다. 후자의 경우, foo이 정의되지 않은 경우, 개발자는 정의되지 않았 음을 알게되고 해석기가 아닌 명확한 오류 경고를 받아야합니다 (첫 번째 경우와 마찬가지로) undefined으로 설정합니다. ~ 예기치 결과.

Reference Error

: 존재하지 않는 변수를 참조 할 때

오류를 나타냅니다. 선언되지 않은 변수를 역 참조하려고 할 때 ReferenceError가 발생합니다.

대한 추가 정보를 원하시면이 문서를 살펴 보자

참조를 확인할 수없는 것으로 간주됩니다 경우 해당 기본 값 : 기사 위에서 인용

을 정의되지 않음. 따라서 점 앞의 값이 정의되지 않은 경우 속성 참조를 해석 할 수 없습니다. 다음 예제에서는 ReferenceError가 발생하지만 TypeError가 먼저 도착하기 때문에 ReferenceError가 발생하지 않습니다. 이는 속성의 기본 값이 정의되지 않은 유형을 객체로 변환하려고 시도 할 때 TypeError를 던지는 CheckObjectCoercible (ECMA 5 9.10에서 11.2.1까지)의 영향을 받기 때문입니다.

예 : 어느 속성이나 변수는

var foo; 
foo.bar; //TypeError (base value, foo, is undefined) 
bar.baz; //ReferenceError (bar is unersolvable) 
undefined.foo; //TypeError (base value is undefined) 

언급 그래서, 해결할 수없는 정의이며 ReferenceError가 발생합니다 :

foo; //ReferenceError 
2

첫 번째 예 (window.foo)에서는 창 개체의 속성에 액세스하고 있습니다. JavaScript는 객체의 존재하지 않는 속성에 액세스하려고 할 때 "undefined"를 반환합니다. 그렇게 설계되었습니다.

두 번째 예제에서는 변수를 직접 참조하고 있으므로 존재하지 않으므로 오류가 발생합니다.

JavaScript가 설계되고 작동하는 방식입니다.

1

자바 스크립트에서 할당 할 수있는 그런 순간에 객체 필드가 ​​있으므로 window.foo입니다. 아래의 설명을 참조하십시오)var foo;에 해당하는 경우에 해당하는 경우에만 파란색 대신 foo을 호출하면 브라우저가 패닉 상태에 빠지기 때문에 어떤 객체를 볼지조차 알지 못하게됩니다.

//when in global context, 'var' sets a property on the window object 
var foo; 

console.log(foo); 
//it will then also log `undefined` instead of throwing the error. 

//if you then do: 
foo = "abbazabba"; 

console.log(window.foo); 
// it will return "abbazabba" 
+1

'window.foo'는'var foo'와 동일하지 않습니다. –

+0

@TimDown. 좀 더 자세하게 설명해 주실 수 있습니까? 어쩌면 대답에? – gdoron

+0

@TimDown & @gdoron 좋아요, 그건 약간 진실입니다 - 내가 의미했던 바는 global.foo가 전역 컨텍스트에서 선언 될 때'var foo'와 같습니다. – JKing

관련 문제