ES6箭头功能,无参数

kof*_*fus 5 javascript ecmascript-6

考虑

function f() { ... }
Run Code Online (Sandbox Code Playgroud)

另一个函数dosomething期望像f这样的函数

function dosomething(callback) { ...; callback() } 
Run Code Online (Sandbox Code Playgroud)

期望f(dosomething的一个例子可以是setTimeout)

调用dosomething并传递f,之间有区别:

dosomething(f);
Run Code Online (Sandbox Code Playgroud)

dosomething(() => f());
Run Code Online (Sandbox Code Playgroud)

这些选项中的任何一个都比较好

Que*_*Roy 4

包装函数(第二个示例)是否是箭头函数不会改变这里的情况。

然而,这个包装函数对于禁止参数传输很有用:在第一种情况下,如果callback使用参数调用,它将被赋予f. 第二种情况则不然。另一种方法是限制传输参数的数量:dosomething((a, b) => f(a, b));

它还可以用于防止this注入:在第一种情况下,doSomething可以bind f更改其this( callback.bind(whatever))。使用包装函数(无论是否有箭头),它不会产生任何效果,并且f会保留他的this(全局上下文)doSomething

  • 另一个区别:数量控制。您可能传递一个需要一定数量参数的回调函数(在本例中为 0),但是没有什么可以阻止您传递回调的函数传递更多参数。包装函数意味着这些额外的参数不会进入真正的回调。作为一个简单的实际示例,请将“[1,2,3,4,5].forEach(console.log)”的输出与“[1,2,3,4,5]”的输出进行比较。 Node.js 中的 forEach((n) => console.log(n))` (3认同)