ES6中的箭头函数

132 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情

简介:

箭头函数(arrow function)是ES6新增的,他的定义就是一个箭头,等同于匿名函数,并且简化了函数的定义。

使用:

如果函数中只有一行代码,return可以省略,如果返回的是一个对象,需要将这个对象外面再包一个括号。 示例: 如果函数有多行代码:

x =>{
    let y = 9;
    return y * x
}

如果函数只有一行代码:

x => 2 * x

如果形参有多个需要用括号括住:

(x,y) => y * x

如果代码只有一行,并返回的对象,需要用括号将对象括起来:

(x,y) => ({
    name: x,
    value: y
})

与普通函数的区别:

一、箭头函数内部的this是词法作用域,由上下文确定:

  1. 箭头函数没有prototype(原型),所以箭头函数本身没有this,箭头函数.prototype===undefined。
  2. 箭头函数的this指向在定义的时候继承自外层第一个普通函数的this,和使用位置没有关系,如果被继承的普通函数的this指向改变,箭头函数的this指向会跟着改变。普通函数的this指向调用它的对象。
  3. 不能直接修改箭头函数的this指向。
  4. 箭头函数外层没有普通函数,严格模式和非严格模式下它的this都会指向window(全局对象),普通函数的默认绑定规则是:在非严格模式下,默认绑定的this指向全局对象,严格模式下的this指向undefined。tip:严格模式在中途声明无效,必须在全局/函数的开头声明才会生效。

二、箭头函数使用new 调用会报错

因为箭头函数没有constructor。

三、箭头函数不支持重复命名函数参数,普通函数的函数参数支持重命名

普通函数的函数参数支持重命名,后面出现的会覆盖前面的,箭头函数会抛出错误。

function func1(a, a) {
    console.log(a, arguments); // 2 [1,2] 
} 
var func2 = (a,a) => { 
    console.log(a); // 报错:在此上下文中不允许重复参数名称 
}; 
func1(1, 2); 
func2(1, 2);