Hal*_*alt 98 javascript typescript ecmascript-6 arrow-functions
我在一个Angular示例中遇到了这个构造,我想知道为什么选择它:
_ => console.log('Not using any parameters');
Run Code Online (Sandbox Code Playgroud)
我理解变量_意味着不关心/不使用但因为它是唯一的变量是有任何理由更喜欢使用_ over:
() => console.log('Not using any parameters');
Run Code Online (Sandbox Code Playgroud)
当然,这不能是一个字符少于键入.()语法在我看来更好地传达了intent,并且更具特定类型,因为否则我认为第一个示例应该是这样的:
(_: any) => console.log('Not using any parameters');
Run Code Online (Sandbox Code Playgroud)
如果重要,这就是使用它的背景:
submit(query: string): void {
this.router.navigate(['search'], { queryParams: { query: query } })
.then(_ => this.search());
}
Run Code Online (Sandbox Code Playgroud)
Est*_*ask 78
可以使用这种风格的原因(也可能是为什么在这里使用它)是_
比一个字符更短的一个字符()
.
可选括号与可选花括号属于同一样式问题.这在很大程度上是品味和代码风格的问题,但由于一致性,冗长在这里受到青睐.
虽然箭头函数允许单个参数没有括号,但它与零,单个解构,单个休息和多个参数不一致:
let zeroParamFn = () => { ... };
let oneParamFn = param1 => { ... };
let oneParamDestructuredArrFn = ([param1]) => { ... };
let oneParamDestructuredObjFn = ({ param1 }) => { ... };
let twoParamsFn = (param1, param2) => { ... };
let restParamsFn = (...params) => { ... };
Run Code Online (Sandbox Code Playgroud)
尽管在TypeScript 2.0中针对下划线参数修复了is declared but never used
错误,但也可以从linter或IDE 触发警告.这是反对这样做的一个相当大的争论._
unused variable/parameter
_
可以常规地用于被忽略的参数(如已经解释的另一个答案).虽然这可能被认为是可以接受的,但这种习惯可能会导致与_
Underscore/Lodash命名空间发生冲突,当有多个被忽略的参数时,这看起来也很混乱.由于这个原因,有正确命名的下划线参数(在TS 2.0中支持)是有益的,也节省了确定函数签名的时间以及为什么参数被标记为忽略(这违反了_
参数作为快捷方式的目的):
let fn = (param1, _unusedParam2, param3) => { ... };
Run Code Online (Sandbox Code Playgroud)
由于上面列出的原因,我个人认为_ => { ... }
代码风格应该避免使用.
Ber*_*rgi 59
该
()
语法传达的意图更好恕我直言,也是更具体的类型
不完全是.()
说该函数不期望任何参数,它不会声明任何参数.函数.length
为0.
如果你使用_
,它明确声明该函数将传递一个参数,但你不关心它.函数.length
将为1,这在某些框架中可能很重要.
所以从类型的角度来看,它可能是更准确的事情(特别是当你不打字any
但是,比方说_: Event
).正如你所说,键入的字符少一个,在某些键盘上也更容易触及.
Gün*_*uer 23
我猜_ =>
它只是用过,() =>
因为_
在其他语言中很常见,不允许只省略JS中的参数.
_
在Go中很受欢迎,它也用于Dart表示参数被忽略,可能还有其他我不知道的参数.
Mic*_*son 10
可以区分两种用法,一些框架使用它来表示不同类型的回调.例如,我认为节点表达框架使用它来区分中间件的类型,例如错误处理程序使用三个参数,而路由使用两个.
这种差异看起来像下面的例子:
const f1 = () => { } // A function taking no arguments
const f2 = _ => { } // A function with one argument that doesn't use it
function h(ff) {
if(ff.length==0) {
console.log("No argument function - calling directly");
ff()
} else if (ff.length==1) {
console.log("Single argument function - calling with 1");
ff(1)
}
}
h(f1)
h(f2)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33275 次 |
最近记录: |