箭头函数(ES6)

箭头函数(ES6)

箭头函数是函数简写语法 ,() => {},和普通函数行为差异很大,是 JS 进阶重点。

一、基础语法

1. 完整写法

js 复制代码
// 普通函数
function fn(a, b) {
  return a + b;
}

// 等价箭头函数
const fn = (a, b) => {
  return a + b;
};

2. 简写规则(常用)

  1. 只有一个形参:可省略括号
js 复制代码
const fn = x => x * 2;
  1. 函数体只有一行 return 代码 :可省略 {} 和 return
js 复制代码
// 单行返回,直接写表达式
const add = (a, b) => a + b;
  1. 无参数:括号不能省
js 复制代码
const say = () => "hello";
  1. 单行返回对象 :必须用小括号包裹
js 复制代码
// 错误:{} 会被当成函数体
// const getObj = () => { name: "zs" };

// 正确
const getObj = () => ({ name: "张三" });

二、核心特性(重点,面试必考)

1. 没有自身 this

箭头函数的 this 继承外层最近一层作用域的 this ,永远不会改变。

普通函数 this 由调用方式决定,二者最大区别。

示例:

js 复制代码
const obj = {
  name: "李四",
  // 普通函数:this → obj
  fn1() {
    console.log(this.name); 
  },
  // 箭头函数:this 继承外层(全局/window)
  fn2: () => {
    console.log(this.name); 
  }
};
obj.fn1(); // 李四
obj.fn2(); // undefined

实用场景:解决定时器 this 指向问题

js 复制代码
const person = {
  name: "小明",
  say() {
    // 箭头函数 this 继承外层 say 函数的 this
    setTimeout(() => {
      console.log(this.name); // 小明
    }, 1000);
  }
};
person.say();

2. 没有 arguments 对象

箭头函数内部不存在 arguments,要用就用剩余参数 ... 替代:

js 复制代码
// 箭头函数 用 ...rest 接收所有参数
const fn = (...rest) => {
  console.log(rest);
};
fn(1, 2, 3); // [1,2,3]

3. 不能作为构造函数

不能使用 new 调用,没有 prototype 原型:

js 复制代码
const Person = () => {};
// new Person(); // 报错

4. 不能使用 yield

不能用作生成器函数(function*)。

5. 不绑定 super

不能在类的方法中配合 super 使用。


三、使用场景 & 禁忌

✅ 适合使用箭头函数

  1. 简短回调函数(数组方法:map/filter/forEach)
js 复制代码
const arr = [1,2,3];
const res = arr.map(item => item * 10);
console.log(res); // [10,20,30]
  1. 定时器、事件回调,需要沿用外层 this
  2. 简单工具函数、一行计算逻辑

❌ 不建议使用箭头函数

  1. 对象方法(会改变 this,拿不到对象自身属性)
  2. 类的原型方法
  3. 需要使用 arguments、new、yield 的场景
  4. 函数体逻辑复杂、多行代码(可读性变差)

四、this 速记口诀

普通函数:this 看调用,谁调用指向谁

箭头函数:this 看定义,继承外层 this

相关推荐
usdoc文档预览2 小时前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
用户2705077725242 小时前
Agent 调工具卡住?3 种超时与取消策略实测对比
前端
LuHang3 小时前
我一行代码没写,把领导派的活做成了公司内部系统😭
前端
明月_清风3 小时前
Meta 开源了一个 AI Native 组件库:Astryx,150+ React 组件,专为 AI Agent 而设计
前端·人工智能·ai编程
用户850869276154 小时前
秒杀系统中 Shell 脚本并发控制 Bug:究竟哪里出了
前端
程序员大阳6 小时前
HTML+CSS+JS对话式实战(3)-活动管理页实现查询、新增、删除API后端接口
javascript·css·html·实战·删除·查询·新增
炫酷的大高个6 小时前
6 亿播放的闪身步,我用前端算出 15 倍重心差
前端·javascript
不可能片场6 小时前
内容运营自动化 配图折行别把词切两半
前端·electron
Lank_M7 小时前
HEIC转JPG统一转sRGB,P3高饱和色就回不来了
前端
补码缩写7 小时前
sharp默认转JPG颜色没错,ICC和EXIF却全没了
前端