在HTML <script>
标签中,除了任何函数外,var
还有什么含义?`var`在全局范围内做什么?
这三个符号有什么区别吗?
<script>
var a = 1;
b = 1;
window.c = 1;
</script>
在HTML <script>
标签中,除了任何函数外,var
还有什么含义?`var`在全局范围内做什么?
这三个符号有什么区别吗?
<script>
var a = 1;
b = 1;
window.c = 1;
</script>
在顶层(所有功能之外)var
声明了一个全局变量。
为了避免这种情况,将你的代码包装在一个函数中。
(function() {
var a = 1;
}());
'a' in window;
// => false
尽管每个表单声明了一个全局变量,但它们之间存在细微的差异。 var
在window
上创建了一个不可抵消的财产,并且受制于典型的提升规则,据此语句的执行上下文开始时,该财产将存在于window
上。其他表单在该行代码执行时在window
上创建可删除的属性。
查看this answer了解更多信息。
在你简单的,不太可能的例子中,没有什么区别,但是如果你决定养成不声明变量的习惯,会有一些细微的差别,因为它们是相同的。
你可以在Mozilla Developer Network上看到这些差异,我可以在这个问题上进行讨论。
简要总结主要的原因b = 1
不好:
浏览器在严格模式下将抛出b = 1
异常。
从一个函数内,只有var a = 1
将作用于该函数。目前还不清楚您是否打算让b = 1
成为全球性的。如果你正在改变这个变量,有一天你会想知道为什么你会从完全相同的参数得到不同的结果。
不,在全局范围内它并不是因为你在全局范围内本地定义它,这与在全局范围中定义它而不是'var'一样。 – Cilan 2014-12-02 03:46:50
然而,使用'var'会更快:http://jsperf.com/var-in-global-scope(微小的优化,你不应该在代码中牺牲质量) – Cilan 2014-12-02 03:50:15
@TheWobbuffet- * var *关键字在全局代码中与在函数代码中具有完全相同的含义 - 它在当前执行上下文中创建一个变量。已声明变量和分配给全局(窗口)对象的属性之间至少有两个显着差异。 – RobG 2014-12-02 04:39:59