NodeJS Bug?执行在要返回的字符串之前带有换行符的返回语句时出错

NodeJS Bug? Error when a return statement with a line feed before the string to be returned is executed

本文关键字:返回 换行符 出错 语句 字符串 Bug 执行 NodeJS      更新时间:2023-09-26

我正在尝试从模块中调用一个函数来构建HTML字符串。当函数以以下方式编写时,在return语句和字符串声明之间使用LF(换行符),则返回为"未定义"。。。

exports.buildHtmlContent = function (content) {
    return
    "<!DOCTYPE html>                    '
    'n<html lang='en-US'>               '
    'n  <head>                          '
    'n  </head>                         '
    'n  <body>                          '
    'n      <h1>" + content + "</h1>    '
    'n  </body>                         '
    'n</html>";
};

然而,当函数以下面的另一种方式编写时,如果没有LF after return语句,它就可以正常工作!

exports.buildHtmlContent = function (content) {
    return "<!DOCTYPE html>             '
    'n<html lang='en-US'>               '
    'n  <head>                          '
    'n  </head>                         '
    'n  <body>                          '
    'n      <h1>" + content + "</h1>    '
    'n  </body>                         '
    'n</html>";
};

这是NodeJs中的一个错误吗?NodeJs对函数1的解释看起来像是认为返回是空的,即使缺少";",并且没有将下面的字符串声明与return语句关联起来。显然NodeJs在决定"return"语句的解释结束之前没有检查";"的缺失。

这与JavaScript有关,而不是Node.js。大多数JavaScript引擎都实现了自动分号插入,这意味着它将尝试用分号自动分隔两个子句。语句return本身是有效的,因为它将返回undefined,字符串也是有效的语句。例如:

"use strict";

触发ASI的原因是线路中断和return限制生产。不是bug,而是功能。