“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 中做了啥,背后的原因是啥?

nextState 在 shouldComponentUpdate 中做了啥?

BuildContext 在 Flutter 中做了啥?

retranslateUi 在 PyQT 中做了啥

elementFormDefault 在 XSD 中做了啥?