箭头函数的语法: () => {}
箭头函数和普通函数的区别:
- 箭头函数不能 new ,否则会报错
- 箭头函数不存在 arguments
- this的指向问题
- 箭头函数的this指向,默认指向该箭头函数定义时所在的对象,而不是谁调用该箭头函数this指向就指向谁
- 通俗理解: 箭头函数的this指向,永远指向它的父级(即: 上下文)对象
1. 箭头函数的使用
let fn = (num1, num2) => {
if (num1 > num2) {
return num1 - num2
} else {
return num1 + num2
}
};
num = fn(1, 2);
2. 只有一个形参的时候()可以省略
let fn = num => {
if (num > 0) {
return num - 1
} else {
return num + 1
}
};
num = fn(1);
3. 直接进行 return 没有其他逻辑代码的时候,可以省略掉 {} 和 return
let fn = num => num + 1;
num = fn(1);
# 等同于
function fn(num) {
return num + 1
}
num = fn(1);
4. 单行箭头函数直接返回对象需要加上 ()
let returnObj = () => ({a: 1, b: 2});
console.log(returnObj()); // {a: 1, b: 2}
5. 箭头函数使用解构赋值
let deconstruction = ({name, age}) => `姓名:${name} 年龄:${age}`;
console.log(deconstruction({name: 'Kevin', age: '18'})); // 姓名:Kevin 年龄:18
6.箭头函数使用 ...运算符 代替 arguments
- 普通函数使用 arguments
function oldArgumentsFn() {
console.log(arguments);
}
oldArgumentsFn(1, 2, 3, 4, 5);
- ...运算符
let newPointFn = (a, ...b) => {
console.log(a); // 1
console.log(b); // [2, 3, 4, 5]
};
newPointFn(1, 2, 3, 4, 5);
7.箭头函数的this指向问题
- 普通函数的this指向 -> 谁调用该箭头函数this指向就指向谁
let arrowJson = {
time: function () {
console.log(this); // {time: ƒ}
setTimeout(function () {
console.log(this); // Window
})
}
};
arrowJson.time();
- 箭头函数的this指向 -> 默认指向该箭头函数定义时所在的对象
let arrowJson2 = {
time: function () {
console.log(this); // {time: ƒ}
setTimeout(() => {
console.log(this); // {time: ƒ}
})
}
};
arrowJson2.time();
let arrowJson3 = { //注意这里的 this 指向
time: () => {
console.log(this); // Window
setTimeout(() => {
console.log(this); // Window
})
}
};
arrowJson3.time();