dev*_*ato 6 javascript ecmascript-6
我注意到,当我想编写一个粗箭头函数“ => ”时,我可以做_=>,()=>
或者(_)=>和我的代码功能相同(至少在我的用例中)
它们之间有实际区别吗?如果是,我应该使用哪一个?我()=>大部分时间都在使用,但是有一天有一天我看到某人的代码正在使用,_=>并且我认为它看起来很酷,所以我也开始使用它。
我看到了这篇中等文章https://medium.freecodecamp.org/when-and-why-you-should-use-es6-arrow-functions-and-when-you-shouldnt-3d851d7f0b26,作者声明您可以使用_=>或()=>但未指定是否有区别。
Gol*_*den 11
胖箭头功能的一般形式是
(parameter-list) => function-body
Run Code Online (Sandbox Code Playgroud)
如果没有任何参数,请使用一对空括号:
() => {}
Run Code Online (Sandbox Code Playgroud)
如果您有一个参数,则为:
(x) => {}
Run Code Online (Sandbox Code Playgroud)
由于_是JavaScript中的有效标识符,因此您可以执行以下操作:
(_) => {}
Run Code Online (Sandbox Code Playgroud)
现在,有一条特殊的规则适用:如果只有一个参数,则可以跳过括号,从而得到:
_ => {}
Run Code Online (Sandbox Code Playgroud)
请注意,这仅在具有单个参数的情况下才有效,即对于两个参数,您始终必须指定括号:
(x, y) => {}
Run Code Online (Sandbox Code Playgroud)
现在,在右侧,如果您的整个函数仅包含带有的单个语句return,例如
x => { return x; }
Run Code Online (Sandbox Code Playgroud)
您可以省略花括号和return:
x => x
Run Code Online (Sandbox Code Playgroud)
至少,如果您在右侧不尝试返回对象(看起来像这样)(此代码将无法工作!),则为true:
x => { value: x }
Run Code Online (Sandbox Code Playgroud)
之所以不起作用,是因为JavaScript无法将其与函数主体(也使用花括号)区分开来,因此现在必须将其包装在括号中:
x => ({ value: x })
Run Code Online (Sandbox Code Playgroud)
我认为,关于胖箭头函数的语法,这几乎是您需要了解的所有内容。
你不应该仅仅因为某些东西看起来很酷就使用它。
_ 通常用于告诉 linter(或读者)您不是故意使用某个参数的。
因此,如果您有一个带有两个参数的回调,并且您只使用第二个参数,那么您将编写第二个参数,(_, arg) => console.log(arg)因为如果您编写(foo, arg) => console.log(arg),则 linter 会抱怨foo未使用。
并且某些 API 可能会根据回调具有的参数数量而具有不同的行为(expressjs 的中间件就是一个例子),因此如果 API 检查length回调的属性,那么您可能需要使用像_.
var cb1 = _ => {};
var cb2 = () => {};
console.log(cb1.length)
console.log(cb2.length)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |