我正在学习 JavaScript 并在 jQuery 的网站上阅读本教程。
在以下示例中
// 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"
sayHello()
调用时我看不到预期的输出。相反,变量是undefined
. 但是,如果我通过将全局变量分配给它来定义window.myName
它就可以了。
我正在使用 Chrome 版本 25.0.1364.152 m。
教程不正确还是我遗漏了什么?
完整的 HTML 在这里: http: //pastebin.com/4M27vDB4
更新:接受的答案解释了发生的事情。我还想提一下可能的解决方案——在上面声明全局变量而不使用var
. 因为以下:
此外,在没有 var 关键字的函数内声明的变量不是函数的本地变量——JavaScript 将遍历作用域链一直到窗口作用域以查找变量先前定义的位置。如果变量之前没有定义,它将在全局范围内定义,这可能会产生意想不到的后果。