0

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

function identity() {
    var name = 'Jack';
    alert(name);
    return
    name
};
var who = identity();
alert(who)

这剪断了输出,插孔然后未定义,为什么?

4

2 回答 2

7

改变这个

return
name

对此:

return name;

return 语句是 javascript 不喜欢空格的少数几个地方之一。编辑。原来的情况是浏览器在 return 语句后插入一个分号,像这样

return;
name // this gets ignored

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

ECMAScript 标准说明了这一点(除其他外)

某些 ECMAScript 语句(empty 语句、变量语句、表达式语句、do-while 语句、continue 语句、break 语句、return 语句和 throw 语句)必须以分号结束。这样的分号可能总是显式地出现在源文本中。然而,为方便起见,在某些情况下,这些分号可能会从源文本中省略。这些情况的描述是在这些情况下分号自动插入到源代码令牌流中。

于 2013-09-19T15:33:09.553 回答
1

identity是一个函数。who然后声明它的一个新实例,我们可以从 func 中得知它将创建一个局部变量name并分配jack给它,然后警报。

然后该函数看起来什么return都没有(尽管name在下一行,所以我想您想返回它,更改为return name;)。

于 2013-09-19T15:34:31.553 回答