JavaScript中return关键字后换行为何返回undefined?
为什么return后换行,函数会返回undefined?
这其实是JavaScript里的**自动分号插入(ASI,Automatic Semicolon Insertion)**机制在偷偷搞事情!
你猜的没错,return语句确实被提前终止了——JS引擎会在某些特定场景下自动给代码补充分号,其中就包括return单独占一行的情况。
咱们看你写的第二个报错代码:
(function() { function sayHello() { var name = "myName"; return { fullName: name } } console.log(sayHello().fullName); })();
JavaScript引擎处理这段代码时,会自动在return后面插入一个分号,把它拆成了两个独立的语句:
return; // 这里直接返回undefined,函数执行结束 { fullName: name } // 这只是个无意义的代码块,完全不会被return出去
所以sayHello()最终返回的是undefined,你再去访问undefined.fullName,自然就会抛出错误了。
而第一个正常运行的代码里,return后面紧跟对象字面量的左大括号{,JS引擎会认为这是同一条语句的延续,不会插入分号,所以能正确返回对象。
如果就是想把return和对象字面量分开写,也有办法——给对象字面量套个括号,这样ASI就不会乱插分号了:
(function() { function sayHello() { var name = "myName"; return ( { fullName: name } ) } console.log(sayHello().fullName); })();
内容的提问来源于stack exchange,提问作者brk
相关产品推荐
相关产品推荐

