首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript中的赋值和var关键字

javascript中的赋值和var关键字
EN

Stack Overflow用户
提问于 2012-11-01 23:22:27
回答 4查看 1.1K关注 0票数 6

我正在读“学习节点”这本书,我陷入了一个非常简单的问题,一个我没有过多思考的问题: javascript中的作业。

作者指出,我们应该意识到,通过使用Node的REPL,将返回以下未定义的内容:

代码语言:javascript
运行
复制
var a = 2
(undefined)

而下面的代码将在REPL中返回'2‘:

代码语言:javascript
运行
复制
a = 2
2

为什么会这样呢?上面的代码不是属性吗?怎么会这样?如果var 'a‘直到代码中的这一点都不存在,为什么它不存在呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-02 00:03:25

对于每个ECMA-262 § 12.2,VariableStatement (即var identifier=value)显式返回任何内容。此外,VariableStatement是一条语句;语句不返回值,并且将语句放在表达式要到达的位置是无效的。

例如,以下这些语句都没有意义,因为它们将语句放在需要产生值的表达式的位置:

代码语言:javascript
运行
复制
var a = var b;
function fn() { return var x; }

对于每个变量,assignment to a § 11.13.1 (identifier=value)返回赋值的值。

当您编写var a = 1;时,它会声明a并将其值初始化为1。因为这是一个VariableStatement,所以它不返回任何内容,并且REPL打印undefined

a=1是将1赋值给a的表达式。因为没有a,所以JavaScript会在普通代码中隐式地创建一个全局a (但是会在严格模式下抛出一个ReferenceError,因为您不能在严格模式下隐式创建新的全局变量)。

无论以前是否存在a,表达式仍然会返回赋值1,因此REPL会打印该值。

票数 7
EN

Stack Overflow用户

发布于 2012-11-01 23:33:38

在这里只是猜测-这可能可以通过参考ECMAScript第5版规范来验证(但天哪,这件事很麻烦)-这可能与"var“语句的规范与为”全局“对象分配属性有关。

当您声明一个变量并为其赋值(var a=2)时,返回的值可能是“未定义的”,因为规范规定"var“语句应该返回该值。

当您不使用"var“语句将变量赋给一个符号时,您实际上是在为具有该名称的全局对象的属性赋值。也就是说,a=2等同于window.a=2,我们知道为属性赋值会返回赋值的值。

票数 1
EN

Stack Overflow用户

发布于 2012-11-01 23:34:14

var a = 2是一条语句。因此,它没有价值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13180195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档