在(桌面)浏览器中引用内置全局属性X时,是否应该写一个window.X?

Šim*_*das 8 javascript browser window global-variables

因此,(桌面)浏览器中有许多内置的全局属性.例如:

  • document
  • undefined
  • parseInt
  • JSON
  • location
  • alert
  • setTimout
  • 等等

在引用这些属性时,是否应该通过在其名称前加上明确地将它们标记为全局属性window.?所以,例如:

var wrap = window.document.getElementById('wrap');
Run Code Online (Sandbox Code Playgroud)

window.setTimeout(loop, 100);
Run Code Online (Sandbox Code Playgroud)

var x = window.parseInt(input.value, 10);
Run Code Online (Sandbox Code Playgroud)

我认为这个问题有三个答案:

  1. 是的,window.X在引用全局属性时应始终写.

  2. 不,你不必写window.X.只要X是好的.

  3. 这取决于财产.对于某些属性,请使用window.X,对于某些其他属性使用X.(如果这是你的答案,请详细说明.)

那么,这是什么?

Lek*_*eyn 8

window除了少数例外,我会去3:没有.

在浏览器中,window指的是全局范围.window.因为window.prompt()多余.您可以使用它来强调这prompt()window对象的方法.

我永远不会使用类似的东西,window.Math或者window.NaN因为这些属性是与window对象无关的全局对象,而对象是浏览器中的全局对象.另请参见ECMAScript中定义的全局属性和函数.

如果在当前(本地)作用域中有另一个变量,则prompt还需要使用window.前缀来获取提示对话框,如下所示:

(function() {
   var prompt = "Give me your name!";
   var name = window.prompt(prompt, "your name");
})();
Run Code Online (Sandbox Code Playgroud)

要设置全局变量,还应添加window.前缀以满足jslint等工具.(否则,它看起来就像你忘记了var关键字,从而意外泄漏了全局范围内的变量):

(function() {
   // "WRONG"
   somevar = 1;
   // You probably want to set a local variable, so should use:
   var somevar = 1;
   // take away the confusion, you really wanted to set a global variable:
   window.somevar = 1;
})();
Run Code Online (Sandbox Code Playgroud)

通常,window.考虑下一个示例,省略提高可读性:

window.setInterval(function() {
   var numA = window.parseInt(window.document.getElementById("numA").value, 10);
   var numB = window.parseInt(window.document.getElementById("numB").value, 10);
   window.document.getElementById("avg").value = window.Math.floor((numA + numB) / 2);
}, 1000);
Run Code Online (Sandbox Code Playgroud)


Poi*_*nty 0

就我个人而言,我会选择(3),尽管我认为(2)也是一个很好的答案。我的原因是,某些对象并不是真正属于浏览器窗口的全局环境的一部分。写起来似乎很奇怪,window.Math.floor(n)因为“数学”在规范中作为标准内置的东西存在。然而,“top”或“document”是特定类型的全局上下文所特有的,因此使用“window”限定符似乎更有意义。

(我自己的实际实践介于两者之间;我倾向于明确地使用“窗口”来表示我只是习惯于以这种方式思考的事情。然而,正如我上面所写的那样,它确实大部分都崩溃了。)