当前位置: 首页 > article >正文

js中箭头函数与普通函数的区别

箭头函数(Arrow Function)和普通函数(普通的function声明)在JavaScript中有一些重要的区别。以下是箭头函数和普通函数的主要区别:

  1. 语法:箭头函数的语法更简洁。

普通函数:

function add(a, b) {
  return a + b;
}

箭头函数:

const add = (a, b) => a + b;
  1. this绑定:箭头函数不会创建自己的this值,而是从作用域链的上一层继承this值。

普通函数:

function Person() {
  this.age = 0;

  setInterval(function growUp() {
    this.age++; // 这里的this指向全局对象(在浏览器中是window)
  }, 1000);
}

const p = new Person();

箭头函数:

function Person() {
  this.age = 0;

  setInterval(() => {
    this.age++; // 这里的this指向Person实例对象
  }, 1000);
}

const p = new Person();
  1. arguments对象:箭头函数没有自己的arguments对象,而是继承自外层函数的arguments。

普通函数:

function sum() {
  return Array.from(arguments).reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4)); // 10

箭头函数:

const sum = () => {
  return Array.from(arguments).reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4)); // 抛出错误:arguments is not defined
  1. 不能作为构造函数:箭头函数不能作为构造函数,不能使用new关键字。

普通函数:

function Person(name) {
  this.name = name;
}

const p = new Person('Tom');
console.log(p.name); // Tom

箭头函数:

const Person = (name) => {
  this.name = name;
}

const p = new Person('Tom'); // 抛出错误:Person is not a constructor
  1. 没有prototype属性:箭头函数没有prototype属性,因为它们不能作为构造函数。

普通函数:

function Person() {}

console.log(Person.prototype); // 输出:{constructor: ƒ}

箭头函数:

const Person = () => {}

console.log(Person.prototype); // 输出:undefined

总结:箭头函数和普通函数在语法、this绑定、arguments对象、构造函数和prototype属性方面有很大区别。在编写代码时,需要根据实际需求选择使用哪种函数。


http://www.kler.cn/a/312037.html

相关文章:

  • 蓝队知识浅谈(上)
  • JFROG相关API
  • MySQL数据库:SQL语言入门 【下】(学习笔记)
  • 2024/11/13 英语每日一段
  • 【算法】——二分查找合集
  • Scala入门基础(17.1)Set集习题
  • 删除视频最后几帧 剪切视频
  • Vue3:el-table实现日期的格式化
  • 安卓 uniapp跨端开发
  • JVM 内存模型:堆、栈、方法区讲解
  • 如何使用Postman搞定带有token认证的接口实战!
  • VSCode C++ Tasks.json中的变量
  • 住宅HTTP代理:提升网络隐私与安全的新选择
  • Electron-vue asar 局部打包优化处理方案——绕开每次npm run build 超级慢的打包问题
  • 1.MySQL在Centos 7环境安装
  • STM32 -中断
  • mysql使用sql函数对json数组的处理
  • 首席数据官(CCRC-CDO)的职业价值
  • 学习最佳实践G4F中的编程技术:获得python项目的当前安装版本
  • 2024年【汽车驾驶员(高级)】考试报名及汽车驾驶员(高级)模拟考试题
  • 项目实战bug修复
  • pikachu XXE(XML外部实体注入)通关
  • TCP协议分析《实验报告》
  • 第三方接口-苹果-获取天气接口
  • Flask、Werkzeug 和 WSGI 间的关系
  • 代码随想录算法训练营第三十二天 | 509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯