私は JavaScript を学んでおり、jQuery の Web サイトでこのチュートリアルを進めています。
次の例では
// 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 は、変数が以前に定義された場所を見つけるために、ウィンドウ スコープまでずっとスコープ チェーンをトラバースします。変数が以前に定義されていない場合は、グローバル スコープで定義されるため、予期しない結果が生じる可能性があります。