箭头函数与普通函数的主要区别在于:1. 箭头函数语法更简洁,支持省略括号和return;2. 箭头函数无独立this,继承外层作用域的this,避免回调中this指向丢失;3. 箭头函数不绑定arguments,需用...args获取参数;4. 箭头函数不能作为构造函数,调用new会报错;5. 箭头函数没有prototype属性。因此箭头函数适合简单回调,普通函数适用于需this绑定或构造实例的场景。

箭头函数和普通函数在 JavaScript 中有一些关键区别,主要体现在语法、this 指向、arguments 对象、作为构造函数的能力以及原型属性等方面。
1. 语法更简洁
箭头函数使用 => 语法,适合写简单的单行表达式。
普通函数:function add(a, b) { return a + b; }
箭头函数:const add = (a, b) => a + b;
立即学习“Java免费学习笔记(深入)”;
当只有一个参数时,括号可以省略;函数体只有一条语句时,return 和大括号也可省略。
2. this 指向不同
普通函数有自己的 this 值,由调用方式决定。箭头函数没有自己的 this,它会继承外层作用域的 this。
这使得箭头函数在事件回调或定时器中特别有用,避免了 this 指向丢失的问题。
例如,在对象方法中使用 setTimeout:
普通函数:const obj = { name: 'Alice', greet() { setTimeout(function() { console.log(this.name); }, 100); } } // 输出 undefined
箭头函数:const obj = { name: 'Alice', greet() { setTimeout(() => { console.log(this.name); }, 100); } } // 输出 Alice
3. 不绑定 arguments 对象
箭头函数内部没有自己的 arguments 对象。如果需要访问参数,应使用剩余参数(...args)代替。
普通函数:function logArgs() { console.log(arguments); }
箭头函数:const logArgs = (...args) => console.log(args);
4. 不能用作构造函数
箭头函数不能通过 new 调用,没有 prototype 属性,也不支持动态创建实例。
尝试使用 new 调用箭头函数会抛出错误。
错误示例:const Fn = () => {}; new Fn(); // 报错:Fn is not a constructor
5. 没有原型(prototype)属性
普通函数创建时会自动生成一个 prototype 属性,而箭头函数没有。
console.log(function(){}.prototype); // 有值
console.log((()=>{}).prototype); // undefined
基本上就这些。箭头函数更适合用于无复杂逻辑、不需要独立 this 的场景,比如数组遍历中的回调。而需要定义方法、构造函数或依赖 this 的情况,还是推荐使用普通函数。不复杂但容易忽略。










