2014-12-02 138 views
2

在HTML <script>标签中,除了任何函数外,var还有什么含义?`var`在全局范围内做什么?

这三个符号有什么区别吗?

<script> 
    var a = 1; 
    b = 1; 
    window.c = 1; 
</script> 
+0

不,在全局范围内它并不是因为你在全局范围内本地定义它,这与在全局范围中定义它而不是'var'一样。 – Cilan 2014-12-02 03:46:50

+0

然而,使用'var'会更快:http://jsperf.com/var-in-global-scope(微小的优化,你不应该在代码中牺牲质量) – Cilan 2014-12-02 03:50:15

+0

@TheWobbuffet- * var *关键字在全局代码中与在函数代码中具有完全相同的含义 - 它在当前执行上下文中创建一个变量。已声明变量和分配给全局(窗口)对象的属性之间至少有两个显着差异。 – RobG 2014-12-02 04:39:59

回答

1

在顶层(所有功能之外)var声明了一个全局变量。

为了避免这种情况,将你的代码包装在一个函数中。

(function() { 
    var a = 1; 
}()); 

'a' in window; 
// => false 

尽管每个表单声明了一个全局变量,但它们之间存在细微的差异。 varwindow上创建了一个不可抵消的财产,并且受制于典型的提升规则,据此语句的执行上下文开始时,该财产将存在于window上。其他表单在该行代码执行时在window上创建可删除的属性。

查看this answer了解更多信息。

+0

您能否详细说明一下? “这三种符号有什么区别?” – redditor 2014-12-02 03:42:14

+1

他们在这方面是相同的。 – Jackson 2014-12-02 03:42:40

+0

谢谢。所以你不需要var,在一个函数之外? – redditor 2014-12-02 03:43:33

0

在你简单的,不太可能的例子中,没有什么区别,但是如果你决定养成不声明变量的习惯,会有一些细微的差别,因为它们是相同的。

你可以在Mozilla Developer Network上看到这些差异,我可以在这个问题上进行讨论。

简要总结主要的原因b = 1不好:

  • 浏览器在严格模式下将抛出b = 1异常。

  • 从一个函数内,只有var a = 1将作用于该函数。目前还不清楚您是否打算让b = 1成为全球性的。如果你正在改变这个变量,有一天你会想知道为什么你会从完全相同的参数得到不同的结果。

相关问题