声明变量之间有什么区别:
var a=0; //1
......这样:
a=0; //2
...或:
window.a=0; //3
在全球范围内?
答案 0 :(得分:545)
答案 1 :(得分:39)
保持简单:
a = 0
上面的代码给出了一个全局范围变量
var a = 0;
此代码将提供一个在当前范围内使用的变量,并在其下
window.a = 0;
这通常与全局变量相同。
答案 2 :(得分:10)
<title>Index.html</title>
<script>
var varDeclaration = true;
noVarDeclaration = true;
window.hungOnWindow = true;
document.hungOnDocument = true;
</script>
<script src="external.js"></script>
/* external.js */
console.info(varDeclaration == true); // could be .log, alert etc
// returns false in IE8
console.info(noVarDeclaration == true); // could be .log, alert etc
// returns false in IE8
console.info(window.hungOnWindow == true); // could be .log, alert etc
// returns true in IE8
console.info(document.hungOnDocument == true); // could be .log, alert etc
// returns ??? in IE8 (untested!) *I personally find this more clugy than hanging off window obj
是否有一个全局对象默认情况下挂起所有变量?例如:'globals.noVar声明'
答案 3 :(得分:7)
基于 T.J的优秀答案。克劳德 :( 偏离主题:避免混乱window
)
这是他的想法的一个例子:
<强> HTML 强>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="init.js"></script>
<script type="text/javascript">
MYLIBRARY.init(["firstValue", 2, "thirdValue"]);
</script>
<script src="script.js"></script>
</head>
<body>
<h1>Hello !</h1>
</body>
</html>
init.js (基于this answer)
var MYLIBRARY = MYLIBRARY || (function(){
var _args = {}; // private
return {
init : function(Args) {
_args = Args;
// some other initialising
},
helloWorld : function(i) {
return _args[i];
}
};
}());
<强>的script.js 强>
// Here you can use the values defined in the html as if it were a global variable
var a = "Hello World " + MYLIBRARY.helloWorld(2);
alert(a);
这是plnkr。希望它有所帮助!
答案 4 :(得分:5)
在全球范围内,没有语义差异。
但是你真的应该避免使用a=0
,因为你将值设置为未声明的变量。
还可以使用闭包来避免编辑全局范围
(function() {
// do stuff locally
// Hoist something to global scope
window.someGlobal = someLocal
}());
始终使用闭合装置,并在绝对必要时始终提升到全球范围。无论如何,您应该使用异步事件处理进行大部分通信。
正如@AvianMoncellor所提到的那样,var a = foo
只有一个IE错误,只声明了一个全局的文件范围。这是IE臭名昭着的破解翻译的问题。这个错误听起来很熟悉,所以它可能是真的。
坚持window.globalName = someLocalpointer