箭头函数与普通函数(function)的区别使什么?构造函数(function)可以使用new生成实例,那么箭头函数可以吗?为什么?

本文详细探讨了JavaScript中箭头函数与普通函数的主要区别,包括语法简洁性、this的指向以及ARGUMENTS对象的缺失。箭头函数不绑定自己的this,其this值继承自外层作用域,这与普通函数不同,也无法通过call或apply改变。此外,回调函数的概念也被介绍,阐述了其作为函数参数被其他函数调用的特性,并指出在回调函数中,this通常指向全局对象。同时,箭头函数无法用作构造函数,因为它们没有prototype。

区别:

1.箭头函数语法上比普通函数更加简洁(ES中每一种函数都可以使用形参赋默认值和剩余运算符)

2.箭头函数没有自己的this ,只和所处上下文有关系,它里面能出现的this从属于所处上下文(使用call/Apply都无法改变this的指向)

回调函数中的this一般都是WINDOW

回调函数:把一个函数B作为实参转嘀给另外一个函数A,函数A在执行的时候,可以把传递进来的函数B去执行(执行n次,可传值,可改this)

3.箭头函数中没有ARGUMENTS(类数组),只能基于…arg获取传递的参数集合(数组)

箭头函数不能被new执行,因为箭头函数没有this,也没有prototype,重点是没有prototype
JavaScript箭头函数普通 `function` 函数使用方面存在以下区别: ### 语法简洁性 箭头函数的语法相对普通函数更加简洁。箭头函数使用箭头(`=>`)定义,可省略 `function` 关键字和大括号。例如: ```javascript // 普通函数 function add(a, b) { return a + b; } // 箭头函数 const add = (a, b) => a + b; ``` 若函数体只有一个表达式,箭头函数可省略大括号和 `return` 关键字;若只有一个参数,还能省略参数的括号 [^1][^2]。 ### `this` 指向 箭头函数的 `this` 只代码块上下文有关,普通 `function` 函数的 `this` 调用者有关。例如: ```javascript // 普通函数 function Person() { this.age = 0; setTimeout(function () { console.log(this.age); // 这里的 this 指向全局对象(在浏览器中是 window) }, 1000); } // 箭头函数 function Person2() { this.age = 0; setTimeout(() => { console.log(this.age); // 这里的 this 指向 Person2 实例 }, 1000); } ``` 在普通函数中,`this` 的值取决于函数的调用方式;而箭头函数没有自己的 `this`,它继承自外层函数的 `this` 值 [^3]。 ### 参数获取 箭头函数不能使用 `arguments` 对象,但可以使用剩余参数语法来获取函数的参数。普通函数声明可以使用 `arguments` 对象来获取函数的参数。例如: ```javascript // 普通函数 function sum() { let total = 0; for (let i = 0; i < arguments.length; i++) { total += arguments[i]; } return total; } // 箭头函数 const sumArrow = (...args) => { let total = 0; for (let i = 0; i < args.length; i++) { total += args[i]; } return total; }; ``` ### 构造函数使用 箭头函数不能使用 `new` 关键字作为构造函数来创建对象,而普通函数可以。例如: ```javascript // 普通函数 function Person(name) { this.name = name; } const person = new Person('John'); // 箭头函数 const PersonArrow = (name) => { this.name = name; }; // 以下代码会报错,因为箭头函数不能作为构造函数 // const personArrow = new PersonArrow('John'); ``` ### 生成函数使用 箭头函数不能使用 `yield` 关键字,因此不能用作生成函数普通函数声明可以使用 `yield` 关键字来定义生成函数 [^3]。例如: ```javascript // 普通函数生成function* generator() { yield 1; yield 2; yield 3; } const gen = generator(); console.log(gen.next().value); // 1 // 箭头函数不能使用 yield,以下代码会报错 // const generatorArrow = () => { // yield 1; // }; ``` ### 函数命名 箭头函数是匿名的,普通 `function` 函数可以有名称 [^3]。 ### 适用场景 在使用 Vue2 时,为避免 `this` 指向混乱,一般使用箭头函数。在非 Vue2 框架和 Vue2 框架下的非 Vue 文件中,使用 `function` 声明函数,因为 `function` 更易读,一看就是函数。匿名函数、回调函数一般用箭头函数。当函数调用出现在函数声明之前时,使用 `function` 声明函数,因为有变量提升机制,运行时可以把函数提升到作用域顶部 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值