这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。
如何定义
- es6新增了胖箭头(=>), 用来定义函数表达式。
// 与使用函数表达式定义一个函数对象很相似,在写法更简洁
let eat = (food) => { console.log("今天想吃:"+food) }
适用场景
- 箭头函数书写更简洁,更适合嵌入函数的场景
let eatArr = ['苹果', '橘子', '迷糊桃'];
eatArr.forEach(function(i) {console.log(i)}); // 苹果 橘子 迷糊桃
eatArr.forEach((i) => {console.log(i)});// 苹果 橘子 迷糊桃
简化箭头函数
- 只有一个参数是,可以省略括号。但没有参数或有多个参数时,需要括号。
//只有一个参数
let double = (num) => { return 2 * num; };
//等价于
let double = num => { return 2 * num; };
// 没有参数
let num = () = > { console.log('没有参数'); }
// 有两个或两个以上参数
let sum = (num1, num2) => { return num1 + num2; };
- 箭头后面只有一行代码时,可以省略大括号。
let sum = (num1, num2) => { return num1 + num2; };
//等价于
let sum = (num1, num2) => num1 + num2; //省略大括号会隐式返回这行代码的值,不需要写return
箭头函数中的参数
function fn(){
console.log(arguments[0]);
}
let fn2 = () => {
console.log(arguments[0]);
};
fn('普通函数'); // 普通函数
fn2('箭头函数'); // ReferenceError: arguments is not defined
箭头函数中没有arguments,参数可以使用命名参数传递,又或者把它包裹在函数内部,如下
function fn(){
let bar = () => {
console.log(arguments[0]);
};
bar();
}
fn(123); // 123
箭头函数与普通函数的区别
-
箭头函数没有自己的
this对象。
箭头函数内部this是由上下文决定的。也就是说,箭头函数内部的this是他上层作用域的this对象。普通函数是谁调用this就指向谁,如果箭头函数是定义在函数内部,那么其this就指向这个函数作用域的this对象,如果不是函数作用域,就是全局作用域了(window对象)
普通函数可以使用
call,apply,bind改变其this指向,但是对于箭头函数它会忽略第一个传入的值. -
箭头函数中没有
arguments对象 -
箭头函数中没有
prototype属性,不可以当做构造函数,也就是说不可以使用new调用函数。 -
箭头函数不能使用
yield命令,因此不能用作 Generator 函数。