这些函数是否相同?

时间:2017-06-18 20:26:48

标签: javascript

最近我在教程中看到了这些功能。它们是等价的吗?

(_ => console.log(1))();

(() => console.log(1))();

3 个答案:

答案 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中的错误。

下划线_有时用于表示满足某个合同但实际上被忽略的参数。但是,在这种情况下,这是对此约定的误用,因为参数不需要:不带参数调用函数,因此不需要声明参数。