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 키워드없이 함수 내에서 선언 된 변수는 함수에 로컬이 아닌 - 자바 스크립트 곳을 찾기 위해 윈도우 범위까지 범위 체인 모든 방법을 통과합니다 변수가 이전에 정의되었습니다. 변수가 이전에 이 아닌 경우 전역 범위에 정의되며 예기치 않은 결과가 일 수 있습니다.
여기에서 작동합니다 (Chrome 25). 코드는 어떻게 실행하고 있습니까? –
내 크롬에서 제대로 작동하는 것 같습니다. –
이 코드를'$ (function() {...});} 클로저에 넣었습니까? 이 경우 내부의 컨텍스트는'window'가 아니며, 설명대로'undefined'를 얻을 것입니다. – dfsq