js在浏览器控制台的返回值, 是什么机制

a = 3 
let b = 4

返回的是3,
为什么不是返回声明语句的undefined

进一步阐述下问题:
首先, 截图如下:
1594973478(1).jpg

这里的第三次输入为什么返回的不是最后一句let b =4 的返回值undefined, 而是 3.

这种现象是一种什么样的机制呢?

阅读 2.5k
2 个回答

这个和浏览器没关系, a = 3 这个语句在ECMA定义里就该返回3,它是一个链式调用的过程,比如说a = b = 3,这段代码,如果 b = 3的返回值不是3,那么a的值还怎么传。

用ECMA里面的话来讲就是 LeftHandSideExpression = AssignmentExpression,返回值是AssignmentExpression。

附上ECMA原文:

The production AssignmentExpression : LeftHandSideExpression = AssignmentExpression is evaluated as follows:

  1. Let lref be the result of evaluating _LeftHandSideExpression_.
  2. Let rref be the result of evaluating _AssignmentExpression_.
  3. Let rval be GetValue(_rref_).
  4. Throw a SyntaxError exception if the following conditions are all true:

  5. Call PutValue(_lref_, _rval_).
  6. Return _rval_.

ref:
http://www.ecma-international...

楼上说的对(其实没看懂)

赋值语句是有返回值的,返回的值就是被赋的值, 申明语句的返回值是没有返回值的。

具体看楼上把。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题