如何为“窗口”创建别名?

时间:2016-04-04 20:21:08

标签: javascript

我正在编写一个使用大量全局变量的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...

这似乎会破坏内存,但应用程序运行正常。有没有更好的方法来创建全局变量或窗口别名?

3 个答案:

答案 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 相同。

信息http://javascript.info/task/window-windowwindow