最近我在教程中看到了这些功能。它们是等价的吗?
(_ => console.log(1))();
(() => console.log(1))();
答案 0 :(得分:1)
A"胖箭" (=>
)函数可以使用单个标识符参数名称声明,也可以使用带括号的零个或多个参数列表声明。你的第一个例子
(_ => console.log(1))();
是第一种情况,参数名称为" _"。第二个示例是没有参数的参数列表:
(() => console.log(1))();
两个函数都没有使用它的参数,并且两个调用都不传递任何参数。也就是说,两个函数调用都没有实际参数;这些陈述都以()
结尾。两者是否相等"与否取决于您对"等效的定义"。在这两种情况下,都会发生完全相同的事情。但是,匿名胖箭头功能并不完全相同。
答案 1 :(得分:1)
这两个功能完全相同。唯一的区别是top函数有一个参数for scores in soup:
,而另一个参数为零。这在此示例中无关紧要,因为您不使用_
变量。
但是,如果您使用_
作为变量名,并且在函数中使用它,则会遇到问题。例如:
_
与
不同(_ => console.log(_))();
在第一行中,函数打印参数(() => console.log(_))();
的值,在这种情况下为_
,因为没有值传递给它。在第二行中,函数打印全局变量undefined
的值。如果您使用像underscore.js这样的库,使用变量_
,这可能会成为一个问题。
答案 2 :(得分:0)
不,他们不等同。第一个是带有1个参数的匿名胖箭头函数,第二个是带有0个参数的匿名胖箭头函数。因此,第一个依赖于向函数传递过少参数的事实不是ECMAScript中的错误。
下划线_
有时用于表示满足某个合同但实际上被忽略的参数。但是,在这种情况下,这是对此约定的误用,因为参数不需要:不带参数调用函数,因此不需要声明参数。