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

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


1、外形不同:箭头函数使用箭头定义,普通函数中没有。
2、 箭头函数全都是匿名函数:普通函数可以有匿名函数,也可以有具名函数
3、箭头函数不能用于构造函数:普通函数可以用于构造函数,以此创建对象实例。
4、箭头函数中 this 的指向不同:在普通函数中,this 总是指向调用它的对象,如果用作构造函数,它指向创建的对象实例。
5、箭头函数不具有 arguments 对象:每一个普通函数调用后都具有一个
arguments 对象,用来存储实际传递的参数。但是箭头函数并没有此对象。
6、其他区别:箭头函数不具有 prototype 原型对象。箭头函数不具有 super。
箭头函数不具有 new.target

### 箭头函数普通函数区别 #### 语法形式 箭头函数的定义相较于传统函数更加简洁。对于单个表达式的箭头函数,可以省略大括号 `{}` `return` 关键字;如果仅有一个参数,甚至可以省略圆括号 `()`[^1]。例如: ```javascript const add = (a, b) => a + b; // 单表达式箭头函数 const square = x => x * x; // 单参数箭头函数 ``` 而普通函数则需要完整的函数声明或者匿名函数赋值语句[^2]。 #### this 指向 这是两者之间最重要的区别之一。普通函数内部的 `this` 是动态绑定的,取决于函数被调用的方式。相反,箭头函数并不拥有自己的 `this` 绑定,而是捕获其所在上下文环境中的 `this` 值[^1]。这意味着在对象方法或事件处理器等场景下,使用箭头函数通常能避免因意外改变 `this` 导致的问题。 #### 是否具有原型属性 另一个显著差异在于,箭头函数不具备 `prototype` 属性,它的 `prototype` 默认为 `undefined`,因此无法作为构造器通过 `new` 操作符实例化对象[^3]。 ```javascript const normalFunction = function() {}; console.log(normalFunction.prototype); // 输出: { constructor: [Circular] } const arrowFunction = () => {}; console.log(arrowFunction.prototype); // undefined ``` #### 使用 yield 的可能性 箭头函数不允许包含 `yield` 表达式,所以不能充当 Generator 函数的一部分[^3]。比如下面的例子会抛出错误: ```javascript const generatorFunc = () => { yield 'value'; }; // SyntaxError: Unexpected number ``` 综上所述,尽管箭头函数提供了更紧凑的书写风格以及解决了部分关于 `this` 处理上的难题,但它也有一些局限性需要注意,如不适合做为类的构造器或是生成器函数等情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值