9

JavaScriptのブラウザwindowでは、グローバルオブジェクトが使用されます。これは、グローバルスコープで定義されたすべての変数がの子であることを意味しますwindow。では、なぜこの結果が得られるのでしょうか。

console.log(window.foo); // No error, logs "undefined".
console.log(foo);        // Uncaught ReferenceError: foo is not defined.

フィドル

これらの2つの線は同じである必要がありますね。

4

3 に答える 3

19
于 2012-04-11T09:05:06.657 に答える
3

最初の例(window.foo)では、ウィンドウオブジェクトのプロパティにアクセスしています。オブジェクトの存在しないプロパティにアクセスしようとすると、JavaScriptは「未定義」を返します。そのように設計されています。

2番目の例では、変数を直接参照していますが、変数が存在しないため、エラーが発生します。

これは、JavaScriptが設計および機能する方法です。

于 2012-04-11T09:04:47.080 に答える
1

JavaScriptでは、その場でオブジェクトフィールドを割り当てることができるので、グローバルコンテキストで定義された場合window.fooとほぼ同じですが(以下のコメントを参照) 、青から呼び出すだけでブラウザがパニックになります。調べるオブジェクト。次の場合に注意してください。var foo; foo

//when in global context, 'var' sets a property on the window object
var foo;

console.log(foo);
//it will then also log `undefined` instead of throwing the error.

//if you then do:
foo = "abbazabba";

console.log(window.foo);
// it will return "abbazabba" 
于 2012-04-11T09:07:05.013 に答える