javascript - 为什么当我用箭头函数重写 IIFE 时,它不能与 Douglas Crockford 的风格一起使用?
问题描述
我有一个可以工作的 IIFE,但是当我使用箭头函数重写它时,它不起作用!
1.- 这个工作正常:
let j = 3;
(function (n) {
while (n--)
console.log("n only", n);
}(j));
2.- 这个不行!:
((n) => {
while (n--)
console.log("n only", n);
}(j));
3.- 我已经测试过下一个版本也可以:
((n) => {
while (n--)
console.log("n only", n);
})(j);
但我真的很想了解为什么 (2) 上的版本不起作用。
解决方案
这就是语言定义它的方式。正如mdn所说:
尽管箭头函数中的箭头不是运算符,但箭头函数具有特殊的解析规则,与常规函数相比,它们与运算符优先级的交互方式不同。
它继续举另一个例子,但原理是一样的:
let callback; callback = callback || function() {}; // ok callback = callback || () => {}; // SyntaxError: invalid arrow-function arguments callback = callback || (() => {}); // ok
尽管 Crockford 表示倾向于将 IIFE 的右括号放在最后(在参数之后),但我个人认为将它放在与箭头函数所需的位置相同的位置更直观(在右大括号之后,在论点之前)。
原因是括号的目的是将函数转换为函数表达式,因此参数在该转换中实际上并不重要。所以这似乎更重要:
(function (n) => {
while (n--)
console.log("n only", n);
})(j);
推荐阅读
- c# - 使用绝对路径访问文件的问题
- c# - ObservableCollection 上的 Observable.FromEventPattern
- c - 构建 Windows 64 位 DLL 时的符号冲突
- javascript - Javascript 更新未反映在站点上 - 可能与 cloudflare 相关
- sql - 在 SQL 中使用多列进行排序时如何使空值排在最后?
- javascript - 结合属性速记和休息:{ type, which, selected: { ...selected, ...hovered } } :这里发生了什么?
- npm - 配置具有未知属性“调试”。这些属性有效
- f# - 可区分联合 - 允许模式匹配但限制构造
- python - 试图增加列表中的数字
- excel - 具有两个条件的 VLOOKUP 文本