Javascript代码段解释

Run*_*ion 0 javascript

我在网上看到了这个技巧问题,没有任何答案或描述.不确定这里发生了什么:

function identity() {
    var name = 'Jack';
    alert(name);
    return
    name
};
var who = identity();
alert(who)
Run Code Online (Sandbox Code Playgroud)

这个剪切输出,杰克然后未定义,为什么?

小智 7

改变这个

return
name
Run Code Online (Sandbox Code Playgroud)

对此:

return name;
Run Code Online (Sandbox Code Playgroud)

return语句是javascript不喜欢空格的少数几个地方之一.编辑.原文中发生的是浏览器在return语句后插入分号,就像这样

return;
name // this gets ignored
Run Code Online (Sandbox Code Playgroud)

所以返回值是undefined.TehShrike链接到一个非常好的文档,解释了当忽略空格/换行符和必须插入分号时ECMAAScript环境必须遵循的确切规则.

ECMAScript标准说明了这一点(除此之外)

某些ECMAScript语句(空语句,变量语句,表达式语句,do-while语句,continue语句,break语句,return语句和throw语句)必须以分号结束.此类分号可能始终显式出现在源文本中.然而,为方便起见,在某些情况下可以从源文本中省略这样的分号.这些情况通过说在这些情况下分号自动插入源代码令牌流来描述.

  • 对于回答这个问题的答案,这是很多的赞成. (2认同)