2013-03-08 5 views
3

JavaScript를 배우고 jQuery 웹 사이트의 this 자습서를 진행합니다. sayHello()가 호출 될 때 예를Chrome에서 글로벌 변수가 너무 글로벌하지 않습니다.

다음
// A function being attached to an object at runtime 
    var myName = "the global object"; 
    var sayHello = function() 
    { 
     console.log("Hi! My name is " + this.myName); 
    }; 
    var myObject = { 
     myName: "Rebecca" 
    }; 
    var secondObject = { 
     myName: "Colin" 
    }; 

    myObject.sayHello = sayHello; 
    secondObject.sayHello = sayHello; 

    sayHello();    // "Hi! My name is the global object" 
    myObject.sayHello();  // "Hi! My name is Rebecca" 
    secondObject.sayHello(); // "Hi! My name is Colin" 

에서

은 내가 출력을 예상 표시되지 않습니다. 대신 변수는 undefined입니다. 하지만 전역 변수를 window.myName에 할당하여 정의하면 작동합니다.

Chrome 버전 25.0.1364.152 m을 사용하고 있습니다.

자습서가 잘못되었거나 나 빠졌습니까?

전체 HTML은 여기에 있습니다 : http://pastebin.com/4M27vDB4

UPDATE : 허용 대답은 무슨 일이 있었는지 설명합니다. 또한 가능한 해결책 - 위에서 언급 한 전역 변수를 언급하고자합니다. var없이. 때문에 다음과 :

을 또한, var 키워드없이 함수 내에서 선언 된 변수는 함수에 로컬이 아닌 - 자바 스크립트 곳을 찾기 위해 윈도우 범위까지 범위 체인 모든 방법을 통과합니다 변수가 이전에 정의되었습니다. 변수가 이전에 이 아닌 경우 전역 범위에 정의되며 예기치 않은 결과가 일 수 있습니다.

+0

여기에서 작동합니다 (Chrome 25). 코드는 어떻게 실행하고 있습니까? –

+0

내 크롬에서 제대로 작동하는 것 같습니다. –

+5

이 코드를'$ (function() {...});} 클로저에 넣었습니까? 이 경우 내부의 컨텍스트는'window'가 아니며, 설명대로'undefined'를 얻을 것입니다. – dfsq

답변

4

당신은

$(document).ready(function() 
    // ... 
}); 

폐쇄 내부에이 코드를 뒀다. 이 경우 내부의 컨텍스트는 window (document 개체가 됨)이 아니며 설명 할 때 undefined이됩니다.

3

this.myName을 프로그램에 사용했습니다. this 키워드는 현재 개체를 가리 키기 위해 사용됩니다. sayHello()로 전화를 걸면 "this"는 기본 현재 개체가 window이기 때문에 "window"를 의미합니다. 이제 window.myName을 정의하지 않은 경우 "정의되지 않음"이 표시됩니다.

관련 문제