javascript - 为什么这会抛出 SyntaxError?

标签 javascript promise

我在尝试扩展 Promise 的功能时偶然发现了这种行为。我可能在做一些愚蠢的事情,但我很困惑。

为什么这段代码会抛出 SyntaxError?

Promise.constructor.call(this, function(){})
// Throws
// Uncaught SyntaxError: Unexpected token (
//   at Function (<anonymous>)
//   at <anonymous>:1:21

不过这很好

Promise.constructor.call(this, () => {})

最佳答案

首先,为了说明这一点,请注意 Promse.constructor 只是对 Function 构造函数的引用。

所以基本上你只是在调用:

Function.call(this, function () {})

和:

Function.call(this, () => {})

第一个表达式抛出,因为 function () {} 不是一个有效的函数语句(但它是一个有效的函数表达式)。

问题在于,在作用域的顶部 block 中,函数标识符与函数声明的语句形式的语法相匹配,函数语句应该被命名(这就是错误的原因说 ( 是一个“意外的标记”,解析器期望在 function 关键字和 (字符)。

如果您确实使用名称或使用逗号运算符,它会将函数视为表达式:

console.log(Function('0,function () {}'))

console.log(Function('function test() {}'))

箭头函数没有问题,因为它们只能是表达式。

关于javascript - 为什么这会抛出 SyntaxError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56246997/

相关文章:

node.js - 如何读取 csv 文件并将其存储在对象数组中?

javascript - 如何在保留数据的同时链接 Promises?

javascript - [Vue 警告] : Property or method "games" is not defined on the instance but referenced during render

javascript - 谷歌分析,使用两个不同的帐户跟踪同一网站,如何?

javascript - PushState - 从 href 中删除父目录?

javascript - 将已解决的 promise 值传递到最终的 "then"链的最佳方法是什么

javascript - Promise.all 不返回

node.js - ES6 Promises - 在 Promise 链中调用同步函数

javascript - JS处理下拉框

javascript - String.split() JavaScript 方法在 Firefox 中不起作用