一起养成写作习惯!这是我参与「掘金日新计划 · 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是词法作用域,由上下文确定:
- 箭头函数没有prototype(原型),所以箭头函数本身没有this,箭头函数.prototype===undefined。
- 箭头函数的this指向在定义的时候继承自外层第一个普通函数的this,和使用位置没有关系,如果被继承的普通函数的this指向改变,箭头函数的this指向会跟着改变。普通函数的this指向调用它的对象。
- 不能直接修改箭头函数的this指向。
- 箭头函数外层没有普通函数,严格模式和非严格模式下它的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);