👋 今天我们来聊聊JavaScript里那个让代码瞬间变“高级”的魔法——ES6箭头函数!🏹
是不是觉得 function 写起来太啰嗦?是不是被 this 指向搞得晕头转向?🤯 别慌,这篇笔记手把手带你吃透箭头函数,不仅教你怎么写,还告诉你为什么这么写,干货满满,建议先收藏再看!💖
🧐 什么是箭头函数?
简单来说,箭头函数就是写函数的一种新姿势。它用 => 这个像箭头一样的符号来定义,不仅代码量少了,读起来也更清晰。
对比一下:
// 以前的老写法(传统函数)
const add = function(a, b) {
return a + b;
}
// 现在的潮写法(箭头函数)
const add = (a, b) => a + b;
是不是瞬间清爽了?😎
📝 语法大变身(新手必看)
箭头函数的语法非常灵活,我们分情况来看:
1. 基本款
参数和返回值都有,中规中矩。
const sum = (a, b) => {
return a + b;
}
2. 极简款(单参数 & 单行返回)
- 如果只有一个参数,括号
()可以省略! - 如果只有一行代码(且是返回值),大括号
{}和return都可以省略!
// 只有一个参数 x
const square = x => x * x;
// 多个参数,直接返回结果
const multiply = (a, b) => a * b;
3. 空参数
没有参数时,括号不能少。
const sayHi = () => console.log('Hello!');
4. 返回对象(避坑指南⚠️)
如果你想直接返回一个对象,必须给对象加个括号 (),不然JS会以为那是函数体!
// ❌ 错误写法
const getUser = () => { name: 'Tom', age: 18 }; // 返回 undefined
// ✅ 正确写法
const getUser = () => ({ name: 'Tom', age: 18 });
🔥 核心大招:this 指向(重点!)
这是箭头函数最牛的地方,也是面试高频考点!📝
传统函数的 this 像个“墙头草”,谁调用它,它就指向谁。
箭头函数的 this 是个“专一的人”,它在定义的时候就确定了,永远指向定义时外层作用域的 this。
举个栗子🌰:
const obj = {
name: '小红书',
// 传统函数
sayHi1: function() {
setTimeout(function() {
console.log(this.name); // ❌ 输出 undefined (this指向window)
}, 1000);
},
// 箭头函数
sayHi2: function() {
setTimeout(() => {
console.log(this.name); // ✅ 输出 '小红书' (this继承自sayHi2)
}, 1000);
}
};
结论: 在回调函数(比如定时器、Promise)里,用箭头函数可以完美解决 this 丢失的问题,再也不用写 var that = this 了!🎉
🚫 三大“不支持”(进阶知识)
虽然箭头函数好用,但它不是万能的。以下情况千万别用箭头函数:
不能当构造函数
你不能对它用new关键字。因为它没有自己的this,也没有prototype属性。
const Foo = () => {}; new Foo(); // 报错!没有 arguments 对象
在箭头函数里访问arguments,它其实是外层函数的参数。如果你想获取所有参数,请用 剩余参数 (...args)。
const sum = (...args) => args.reduce((a, b) => a + b, 0);不能用作 Generator 函数
箭头函数里不能用yield关键字。
💡 什么时候用它?
-
数组方法里:
map,filter,reduce简直是箭头函数的快乐老家!
.map(n => n * 2) -
回调函数里:比如
setTimeout,Promise.then。 -
对象方法里(要小心):如果你想让
this指向对象本身,不要用箭头函数定义方法!
const obj = { val: 1, getVal: () => this.val }; // this指向window,不是obj
📌 总结一下
| 特性 | 传统函数 | 箭头函数 |
|---|---|---|
| 语法 | 啰嗦 | 简洁 |
| this 指向 | 谁调用指向谁 | 定义时就确定(继承外层) |
| arguments | 有 | 无(用 ...args) |
| new 关键字 | 可以 | 不可以 |
好啦,今天的ES6箭头函数小课堂就到这里!是不是感觉任督二脉被打通了?⚡️ 赶紧去代码里试一试吧!