“var”在 JavaScript 中做了啥?为啥有时它是作业的一部分? [复制]
Posted
技术标签:
【中文标题】“var”在 JavaScript 中做了啥?为啥有时它是作业的一部分? [复制]【英文标题】:What does "var" do in JavaScript? Why is it sometimes part of an assignment? [duplicate]“var”在 JavaScript 中做了什么?为什么有时它是作业的一部分? [复制] 【发布时间】:2011-12-24 23:06:30 【问题描述】:可能重复:Difference between using var and not using var in javascript
var foo = 1;
foo = 1;
上面两行有什么区别?
【问题讨论】:
您使用的是哪一本 JavaScript 教程/书? (这是一个相当基本的……主题。) 【参考方案1】:基本上var
声明一个变量,你也可以同时赋值给它。
没有var
,它分配给变量。分配将分配给现有变量或创建该名称的全局变量然后分配给它。
在函数之外,这意味着如果变量不存在,则没有真正的区别(原则上)。在这种情况下,两者都创建了全局变量foo
。
在一个函数中,有很大的不同。第一个为函数创建一个局部变量,无论它是否存在于其他地方。
第二个将创建一个全局变量,如果它不存在,或者如果它存在则简单地更改值。
为了使代码尽可能模块化,您应该始终使用var
,除非您特别想更改现有的全局变量。这意味着使用 var
声明函数之外的所有全局变量并使用 var
声明所有局部变量。
【讨论】:
函数外也有区别。这个obj.prop可以做,var obj.prop不能做! @Chintan,这可能更多是因为obj.prop
实际上不能是一个新变量,而是现有obj
变量的属性。【参考方案2】:
foo = 1
会将foo
放在定义foo
的最后一个作用域或全局作用域中。 var foo = 1
会将变量放入当前作用域(即当前函数)。
【讨论】:
更新的语言好多了:) @pst:好的,我原本打算告诉你:“我在发布后大约 3 秒编辑了,抱歉 :)”但我以为你的意思是 jsfiddle.net/minitech/sEkYt【参考方案3】:在第一种情况下 foo 将在定义它的同一范围内可用,即它将是局部变量。 在第二种情况下 foo 是一个全局变量,位于全局范围内。
【讨论】:
以上是关于“var”在 JavaScript 中做了啥?为啥有时它是作业的一部分? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
[].forEach.call() 在 JavaScript 中做了啥?
“use strict”在 JavaScript 中做了啥,背后的原因是啥?