我偶然发现了这个奇怪的东西。我正在 GitHub 上写一些问题,如您所知,要在 GitHub 帖子中使用某些语言突出显示,您应该将其封装在三重 grave accent 中。 。例如,如果您想使用 JavaScript,您应该这样做:
```JavaScript
// Your code
```
它将在您的代码片段中使用 JavaScript 突出显示。
但是,当我在那里写一篇文章时,我不小心复制了从编辑模式剪下的整个代码(包括重音符号)并将其粘贴到 js
文件中。不过,我忘记删除重音了。这是我在 js
文件中的代码:
function test(){
```JavaScript
console.log(1);
```
}
当然应该是语法错误。但是,令我惊讶的是 Node.js 编译它时没有任何错误。我简直不敢相信。根本没有 cytax 错误。这怎么可能?
所以,我认为三重重音在 JavaScript 中具有特殊含义(也许是像 Python 中那样的多行字符串?)。我在互联网上搜索,但一无所获。为什么 EcmaScript 允许这样做?它的使用示例是什么?
最佳答案
自 ES2015 起,反引号是 Javascript 语法的一部分,用于 template literals 。
您的代码不包含任何词法语法错误,模板版本将在您运行该函数时抛出错误,因为 template tagging尝试评估第二个和第三个模板的语法。因此重申一下:不存在语法错误,但是,当您考虑模板标记时,实际最终评估的方式是
""("Javascript\n console.log(1);\n")("")
这不起作用,因为 ""
不是一个函数。它期望反引号之前的字符作为标记函数。如果您用函数替换第一组反引号,它将起作用:
function format(msg) {
return function(secondMsg) {
return "!!" + msg + secondMsg + "!!";
};
}
console.log(format`Javascript\n console.log(1);\n```)
关于JavaScript - 缺少语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508490/