`var`在全球范围内做了什么?

时间:2014-12-02 03:37:53

标签: javascript html

在HTML <script>标记中,在任何函数之外,var是否有任何意义?

这三种符号之间有什么区别吗?

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

2 个答案:

答案 0 :(得分:1)

在顶层(所有函数之外)var声明一个全局变量。

要避免这种情况,请将代码包装在函数中。

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

'a' in window;
// => false

尽管每个表单都声明了一个全局变量,但它们之间存在细微差别。 varwindow上创建一个不可删除的属性,并遵循典型的提升规则,该属性将在window语句的执行上下文的开头var上存在。其他表单在执行代码行时在window上创建一个可删除属性。

有关详细信息,请参阅this answer

答案 1 :(得分:0)

在你简单的,不太可能的例子中,没有区别,但是如果你决定养成不宣称变量的习惯,那么会有一些微妙的差异会导致脱毛。“因为它们是相同的。” p>

您可以在Mozilla Developer Network上阅读这些差异,我可以在这样的问题上阅读。

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

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

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