Dra*_*nar 6 javascript browser node.js
我正在阅读"学习节点"一书,我陷入了一个非常简单的问题,一个我没有过多思考的问题:javascript中的赋值.
作者声明我们应该意识到通过使用Node的REPL,以下将返回undefined:
var a = 2
(undefined)
Run Code Online (Sandbox Code Playgroud)
而下面的代码将在REPL中返回'2':
a = 2
2
Run Code Online (Sandbox Code Playgroud)
这是为什么?上面的代码不是归属?怎么会?如果var'a'在代码中的那一点之前就不存在了,那么它是怎么回事?
根据ECMA-262§12.2,VariableStatement(即var identifier=value
)明确地不返回任何内容.另外,VariableStatement是一个Statement; 语句不返回值,将Statement放在某个表达式的位置是无效的.
例如,以下任何一个都没有意义,因为它们将一个Statement放在需要产生值的表达式的位置:
var a = var b;
function fn() { return var x; }
Run Code Online (Sandbox Code Playgroud)
根据§11.13.1,赋值给variable(identifier=value
)返回赋值.
当你写作时var a = 1;
,它宣告a
并将其价值初始化为1
.因为这是一个VariableStatement,它不返回任何内容,并且打印REPL undefined
.
a=1
是一个分配1
给的表达式a
.由于没有a
,JavaScript会在正常代码中隐式创建一个全局 a
(但会抛出一个ReferenceError
严格模式,因为你不允许在严格模式下隐式创建新的全局变量).
无论之前是否a
存在,表达式仍然返回指定的值1
,因此REPL打印出来.
归档时间: |
|
查看次数: |
939 次 |
最近记录: |