Š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)
我认为这个问题有三个答案:
是的,window.X
在引用全局属性时应始终写.
不,你不必写window.X
.只要X
是好的.
这取决于财产.对于某些属性,请使用window.X
,对于某些其他属性使用X
.(如果这是你的答案,请详细说明.)
那么,这是什么?
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)
就我个人而言,我会选择(3),尽管我认为(2)也是一个很好的答案。我的原因是,某些对象并不是真正属于浏览器窗口的全局环境的一部分。写起来似乎很奇怪,window.Math.floor(n)
因为“数学”在规范中作为标准内置的东西存在。然而,“top”或“document”是特定类型的全局上下文所特有的,因此使用“window”限定符似乎更有意义。
(我自己的实际实践介于两者之间;我倾向于明确地使用“窗口”来表示我只是习惯于以这种方式思考的事情。然而,正如我上面所写的那样,它确实大部分都崩溃了。)
归档时间: |
|
查看次数: |
1035 次 |
最近记录: |