我正在编写一个使用大量全局变量的javascript应用程序:
window.x = 0;
window.y = 0;
我希望能够为窗口对象使用别名:
w = window;
w.x = 0;
w.y = 0;
然而,当我将w设置为window时,它似乎以递归方式将自己添加到DOM:
w = window;
// In the DOM Explorer:
> w page.html
> w page.html
> w page.html...
这似乎会破坏内存,但应用程序运行正常。有没有更好的方法来创建全局变量或窗口别名?
答案 0 :(得分:2)
每当你声明一个没有var的变量时,你就是有效地将它赋值给window对象。
所以,
window.w = window
变为
(function(w) {
w.x = 0;
w.y = 0;
})(window)
这就是递归行为的原因。
您可以使用IIFE来实现您的目标。
getObject
答案 1 :(得分: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 :(得分:0)
在除IE之外的所有浏览器中, window.window 只是一种引用..井..窗口的方式。所以 window === window.window ,是的。
window.window.window 也与 window.window 相同。