我正在學習JavaScript,並通過jQuery網站上的this教程。全局變量在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"
我沒有看到預期的輸出時被調用sayHello()
。相反,變量是undefined
。但是如果我通過將其分配給window.myName
定義全局變量,它就可以工作。
我使用Chrome版本25.0.1364.152米。
是教程不正確還是我錯過了什麼?
全功能HTML是在這裏:http://pastebin.com/4M27vDB4
UPDATE:接受的答案解釋發生了什麼。我也想提一下可能的解決方案 - 在沒有var
的情況下聲明全局變量。因爲以下幾點:
此外,該聲明在函數內部沒有 var關鍵字變量是不是本地的功能 - 的JavaScript會遍歷 作用域鏈一路攀升到窗口範圍,找到其中先前定義了變量 。如果該變量之前未定義爲 ,則會在全局範圍內定義,這可能會導致意外後果。
適用於此(Chrome 25)。你如何運行你的代碼? – 2013-03-08 07:02:43
這似乎工作正常我的Chrome 25 – 2013-03-08 07:03:16
也許你已經把這個代碼放在'$(function(){...});'closure?在這種情況下,它內部的上下文不會是'window',你會得到'undefined',就像你描述的那樣。 – dfsq 2013-03-08 07:05:21