2016-04-04 9 views
2

私はグローバル変数の多くを使用してJavaScriptのアプリを書いている:'ウィンドウ'のエイリアスを作成する方法は?

window.x = 0; 
window.y = 0; 

私はウィンドウオブジェクトのエイリアスを使用できるようにしたいと思います。しかし

w = window; 
w.x = 0; 
w.y = 0; 

、とき私は窓にwを設定し、再帰的にDOMに自分自身を追加しているようだ:

w = window; 
// In the DOM Explorer: 
> w page.html 
> w page.html 
>  w page.html... 

それはメモリを台無しようにこれが見えますが、アプリが細かい実行されています。グローバル変数やウィンドウエイリアスを作成する良い方法はありますか?

+1

理由だけで、あなたは 'window.'を追加する必要はありません、あなたのスクリプトの先頭に、すべての外でそれらを宣言していませんか?または、名前と名前空間を再利用していますか? –

+2

'window.window.window.window.document.title'は合法であり、RAMを無駄にしません...同じように、' w == window'、 'wwww == window.w.window.w' 。つまり、問題はありません... – dandavis

+1

_ "それは再帰的にDOM自体に追加されているようです" _実際にはDOMではなく、ウィンドウは厳密にはその一部ではありません。しかし、とにかく、ウィンドウはブラウザ内で実行されるJSの一番上のオブジェクトであり、あなたが宣言した_every_グローバル変数はウィンドウオブジェクトのプロパティになります - ここでもあなたの 'w'変数はどんな値を持っていますかその中に。 JS変数と実際のHTML要素オブジェクトの間の循環参照は、ブラウザーでは問題でしたが、IEはイベント処理と組み合わせて有名なメモリーホールを持っていました。しかし、あなたがここでやっていることは、ブラウザーに何の問題も起こさないはずです。 – CBroe

答えて

0

グローバル変数はメモリを浪費しませんが、グローバル変数は使用しないでください。もちろん

(function() { 
    var w = window; // Create local alias 
    window.window; // window 
    w.w; // undefined (probably) 
})(); 

、これはグローバルオブジェクトにwindowの点を前提としています。 windowが陰影付けされていてもグローバルオブジェクトへの参照を取得する場合は、Getting a reference to the global object in an unknown environment in strict modeを参照してください。

2

varを指定せずに変数を宣言している場合は常に、それをウィンドウオブジェクトに効果的に割り当てます。

ので、

w = window; 

window.w = window 

になり、その理由は、再帰的な行動です。

IIFEを使用して、必要なものを達成できます。すべてのブラウザで

(function(w) { 
    w.x = 0; 
    w.y = 0; 
})(window) 
+0

ここではIIFEが何をしていますか? – dandavis

+0

これは、window、jQueryのようなグローバルオブジェクトのエイリアスを行う標準的な方法です。これについての詳細[ここ](http://www.nicoespeon.com/en/2013/05/properly-isolate-variables-in-javascript/) –

0

が..よく..ウィンドウを参照するだけのずる休みの方法ですwindow.window IE、をexceptsで。したがって、ウィンドウ=== window.window、真。

そして window.window と同じであるwindow.window.window。

情報http://javascript.info/task/window-windowwindow

関連する問題