ES6箭头函数全解析|从入门到精通,一篇搞定!

👋 今天我们来聊聊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箭头函数小课堂就到这里!是不是感觉任督二脉被打通了?⚡️ 赶紧去代码里试一试吧!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容