首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >箭头函数和普通函数的区别

箭头函数和普通函数的区别

原创
作者头像
Python大程序员
修改2026-06-15 16:38:51
修改2026-06-15 16:38:51
1270
举报

一、1. 语法形式不同

普通函数:function 关键字声明

箭头函数:() => {} 简写形式,支持多种缩写

代码语言:javascript
复制
// 普通函数
function fn1(x) {
  return x + 1;
}

// 箭头函数
const fn2 = x => x + 1;

二、2. this 指向(最大区别)

  • 普通函数this调用方式决定,运行时动态改变
  • 箭头函数无自身 this,定义时继承外层作用域的 this,永远不变

示例对比:

代码语言:javascript
复制
const obj = {
  name: "测试",
  // 普通函数:this → 调用者 obj
  fun1() {
    console.log(this.name); // 测试
  },
  // 箭头函数:this 继承外层(window/全局)
  fun2: () => {
    console.log(this.name); // undefined
  }
};
obj.fun1();
obj.fun2();

三、3. 没有 arguments

  • 普通函数:内置 arguments 类数组,接收所有实参
  • 箭头函数:不存在 arguments,只能用剩余参数 ...rest 替代
代码语言:javascript
复制
// 普通函数
function f1() {
  console.log(arguments); // [1,2,3]
}
f1(1,2,3);

// 箭头函数
const f2 = (...rest) => {
  console.log(rest); // [1,2,3]
};
f2(1,2,3);

四、4. 不能作为构造函数

  • 普通函数:可使用 new 实例化,充当构造函数
  • 箭头函数:禁止 new,直接报错
代码语言:javascript
复制
// 普通函数可用 new
function Person() {}
const p1 = new Person();

// 箭头函数不能 new
const Student = () => {};
// const p2 = new Student(); // 报错

五、5. 没有 prototype 原型

  • 普通函数:拥有 prototype 显式原型,支持原型链继承
  • 箭头函数:没有 prototype 属性
代码语言:javascript
复制
function a(){}
console.log(a.prototype); // {constructor: ...}

const b = () => {};
console.log(b.prototype); // undefined

六、6. 无法使用 call /apply/bind 改变 this

  • 普通函数:可通过 call/apply/bind 强行修改 this
  • 箭头函数:this 早已确定,修改无效
代码语言:javascript
复制
const test = () => {
  console.log(this);
};
// 强行绑定 this 也不生效
test.call({ name: "张三" }); // 依旧指向外层 this

七、7. 不能用作生成器

  • 普通函数可加 * 成为生成器 function*,配合 yield
  • 箭头函数不支持 yield,不能当生成器使用

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、1. 语法形式不同
  • 二、2. this 指向(最大区别)
  • 三、3. 没有 arguments
  • 四、4. 不能作为构造函数
  • 五、5. 没有 prototype 原型
  • 六、6. 无法使用 call /apply/bind 改变 this
  • 七、7. 不能用作生成器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档