箭头函数

箭头函数相当于匿名函数,并且简化了函数定义。当你只需要一个只有一个参数的简单函数时,可以使用新标准中的箭头函数,它的语法非常简单:标识符=>表达式。你无需输入function和return,一些小括号、大括号以及分号也可以省略,可在一定程度上减少代码量。
1.规则:
(1)当函数参数只有一个时,括号可以省略;但是没有参数时,括号不可以省略。
如:

(parameters) => { statements }

// 如果没有参数,那么可以进一步简化,但括号不可以省略: 
() => { statements }

// 如果只有一个参数,可以省略括号: 
parameters => { statements }

(2)函数体(大括号)中有且只有一行return语句时,大括号及return 关键字可以省略。
如:

parameters => expression

// 等价于:
function (parameters){
  return expression;
}

(3)如果要写一个接受多重参数(也可能没有参数,或者是不定参数、默认参数、参数解构)的函数,你需要用小括号包裹参数list。

// 无参数:
let fn = ()=>'Rockets';
//等价于
let fn = function(){
    return 'Rockets';
}

// 两个参数:
let sum = (num1, num2) => num1 + num2;
// 等价于
let sum = function(num1, num2) {
  return num1 + num2;
};

// 不定参数:
(x, y, ...rest) => {
    var i, sum = x + y;
    for (i=0; i<rest.length; i++) {
        sum += rest[i];
    }
    return sum;
}

(4)箭头函数若要返回自定义对象的话,就必须用小括号把该对象括起来先
如:

var getTempItem = id = > ({
   id: id,
  name: "Temp"
});
//注:用小括号包含大括号则是对象的定义,而非函数主体

// 等价于:
var getTempItem = function(id) {
  return {
    id: id, 
    name: "Temp"
     };
};

注意:
(1)使用了块语句的箭头函数不会自动返回值,你需要使用return语句将所需值返回。
如:

var arr = [10, 20, 1, 2];

arr.sort((x, y) => {
    return  x >= y ;
});
console.log(arr); // [1, 2, 10, 20]

(2)不可以当作构造函数,即,不可以使用new 关键字来实例化对象,否则会抛出一个错误。
(3)不可以使用arguments对象,更不能通过arguments对象访问传入参数,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数.

2.this
(1)普通函数中的this:
a.this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.func ,那么func中的this就是obj
b.在默认情况,没找到直接调用者,则this指的是 window (约定俗成)
c.在严格模式下(使用 ‘use strict’),没有直接调用者的函数中的this是 undefined
d.使用call,apply,bind(ES5新增)绑定的,this指的是 绑定的对象

(2)箭头函数没有它自己的this值,this总是指向词法作用域,也就是外层调用者obj,即 箭头函数没有自己的this, 它的this是继承而来; 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象。
举个栗子:

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

var id = 21;

foo.call({ id: 42 });
// id: 42

上面代码中,setTimeout的参数是一个箭头函数,这个箭头函数的定义生效是在foo函数生成时,而它的真正执行要等到 100 毫秒后。如果是普通函数,执行时this应该指向全局对象window,这时应该输出21。但是,箭头函数导致this总是指向函数定义生效时所在的对象(本例是{id: 42}),所以输出的是42。

如有问题,欢迎提出指教

你可能感兴趣的:(箭头函数)