gpt4 book ai didi

javascript - 当我用箭头函数重写时,为什么 IIFE 不能与 Douglas Crockford 的风格一起使用?

转载 作者:行者123 更新时间:2023-11-30 11:06:44 25 4
gpt4 key购买 nike

我有一个可用的 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状态:

Although the arrow in an arrow function is not an operator, arrow functions have special parsing rules that interact differently with operator precedence compared to regular functions.

继续再举一个例子,但是原理是一样的:

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);

关于javascript - 当我用箭头函数重写时,为什么 IIFE 不能与 Douglas Crockford 的风格一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55309061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com