JavaScript箭头函数是编写ECMAScript 6中引入的函数表达式的一种较短的方式。
通常,在JavaScript中,可以通过两种方式创建一个函数:
作为一个声明函数。
函数作为表达式。
可以创建一个函数语句,如下所示:
function add(num1, num2) { var res = num1 + num2; return res;}var sum = add(7, 2);console.log(sum);相同的功能可以创建为一个函数表达式,如下所示:
var add = function (num1, num2) { var res = num1 + num2; return res;}var sum = add(7, 2);console.log(sum);ECMA 2015(或ECMA Script 6)引入了更短的语法来编写称为箭头函数的函数表达式。使用箭头函数,您可以编写上面的函数表达式,如下所示:
var add = (num1, num2) => { return num1 + num2; };正如你所看到的,使用箭头函数编写函数表达式更短。
箭头函数的基本语法规则首先,参数应该在小括号中传递。您可以使用两个参数创建一个箭头函数,如下所示:
var add = (num1, num2) => { return num1 + num2; };如果只有一个参数需要传递,那么括号是可选的,您可以选择忽略它们。您可以使用一个参数创建一个箭头函数,如下所示:
var add = num => { return num * 10; };如果没有参数,那么你必须有一个空括号 - 没有它们就不能写。所以你可以使用箭头函数编写一个没有参数的函数,如下所示:
var add = () => { console.log("hey foo") };如果函数中有单个表达式或语句:
在身体中使用括号是可选的。
使用return语句是可选的。
你可以重写下面的add函数,而不使用函数体中的括号和return语句:
var add = (num1, num2) => num1 + num2;您也可以使用控制台语句编写不带参数的函数,如下所示:
var add = () => console.log("hey");返回对象文字JavaScript箭头函数也可以返回一个对象字面值。唯一的要求是你需要把一个返回对象放在小括号中,如下所示:
var foo = (name, age) => ({ name: name, age: age})var r = foo("my cat", 22);console.log(r);正如你所看到的那样,要返回的对象被放在小括号内。如果你不这样做,JavaScript将无法区分对象字面量和函数体。
箭头功能支持休息参数JavaScript箭头功能支持另一个ES6功能:其余参数。您可以使用箭头函数的其余参数,如下面的代码清单所示:
var add = (num1, num2, ...restparam) => { console.log(restparam.length); var result = num1 + num2; return result;}var r = add(67, 8, 90, 23);console.log(r);在这里看到的例子中,当你用箭头函数使用rest参数时,你会得到2和75的输出,因为传递的额外参数的数量是2,num1和num2的总和是75。
箭头功能支持默认参数另外,JavaScript箭头函数还支持另一个ES6功能:默认参数。我们在这里详细介绍了默认参数。您可以使用箭头函数的默认参数,如下所示:
var add = (num1 = 9, num2 = 8) => { var result = num1 + num2; return result;}var r = add();console.log(r);在上面的列表中,我们使用带有箭头函数的默认参数。调用该函数时,我们没有传递任何值,并且由于默认参数,输出将是17。
“这个”如何在箭头函数中工作?箭头函数没有自己的这个值。的值这箭头函数内部总是从封闭范围继承。在JavaScript中,每个函数都有自己的这个值,这取决于如何调用函数。让我们考虑下面列出的代码:
var Cat = { name: 'mew', canRun: function () { console.log(this) var foo = () => { console.log(this) } foo(); }};在这里,猫是一个对象文字,它包括:
属性名称。
该方法 canRun。
在该 canRun 方法中,我们创建了一个箭头功能FOO,给人的值这个。由于箭头功能不具有其自身的价值这个,它会从周围的函数取值,你会得到:
正如你所看到的, 这个值在 canRun 方法和箭头函数foo中是一样的。箭头函数获取的价值这从继承的范围。如果您对此不清楚,请牢记以下两条规则:
使用的object.method得到一个有意义的对象的值,这在方法。
对于任何其他要求,请使用箭头功能,使该功能不会有它自己的价值这样,它会继承的值,这从封闭的范围。
使用箭头功能的限制有一些适用于箭头功能的限制要注意:
箭头函数没有参数对象。
箭头函数不能与新运算符一起使用,因此它不能用作构造函数。
箭头函数没有原型属性。
如果您尝试使用箭头函数作为构造函数,您将会遇到异常。考虑下面列出的代码:
var foo = (name, age) => { name = name, age = age };var f1 = new foo("cat", 6);在这里,您试图通过使用箭头函数foo作为构造函数来创建对象f1 ,JavaScript将引发以下异常:
而当你试图打印箭头函数的原型值时,你会得到未定义的输出:
var foo = (name, age) => { name = name, age = age };console.log(foo.prototype);发生这种情况是因为箭头函数没有原型属性。请记住:虽然箭头函数为您提供了编写函数表达式的较短方法,但它没有自己的这个值,也不能用作构造函数。