前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >箭头函数与普通函数的区别详解[通俗易懂]

箭头函数与普通函数的区别详解[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-14 13:52:29
8280
发布2022-09-14 13:52:29
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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

一.外形不同:箭头函数使用箭头定义,普通函数中没有 代码实例如下:

代码语言:javascript
复制
// 普通函数
function func(){
  // code
}
// 箭头函数
let func=()=>{
  // code
}

二.箭头函数都是匿名函数 普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。 代码实例如下:

代码语言:javascript
复制
// 具名函数
function func(){
  // code
}
 
// 匿名函数
let func=function(){
  // code
}

// 箭头函数全都是匿名函数
let func=()=>{
  // code
}

三.箭头函数不能用于构造函数,不能使用new 普通函数可以用于构造函数,以此创建对象实例。 代码实例如下:

代码语言:javascript
复制
function Person(name,age){
   this.name=name;
   this.age=age;
}
let admin=new Person("恩诺小弦",18);
console.log(admin.name);
console.log(admin.age);

代码运行如下:

代码语言:javascript
复制
恩诺小弦
18

Person用作构造函数,通过它可以创建实例化对象。 但是构造函数不能用作构造函数。

四.箭头函数中this的指向不同 在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。 1.箭头函数本身不创建this 也可以说箭头函数本身没有this,但是它在声明时可以捕获其所在上下文的this供自己使用。 注意:this一旦被捕获,就不再发生变化

代码语言:javascript
复制
var webName="捕获成功";
let func=()=>{
  console.log(this.webName);
}
func();

运行结果如下:

代码语言:javascript
复制
捕获成功

代码分析:箭头函数在全局作用域声明,所以它捕获全局作用域中的this,this指向window对象。

例子:

代码语言:javascript
复制
var name = "恩诺1";
function wrap(){
  this.name="恩诺2";
  let func=() => {
    console.log(this.name);
  }
  func();
}
let en=new wrap();

运行结果如下:

代码语言:javascript
复制
恩诺2

代码分析: (1)wrap()用作构造函数。 (2)使用new调用wrap()函数之后,此函数作用域中的this指向创建的实例化对象。 (3)箭头函数此时被声明,捕获这个this。 (4)所以打印的是恩诺2,而不是恩诺1。 2.结合call(),apply()方法使用 箭头函数结合call(),apply()方法调用一个函数时,只传入一个参数对this没有影响。

代码语言:javascript
复制
let obj2 = {
    a: 10,
    b: function(n) {
        let f = (n) => n + this.a;
        return f(n);
    },
    c: function(n) {
        let f = (n) => n + this.a;
        let m = {
            a: 20
        };
        return f.call(m,n);
    }
};
console.log(obj2.b(1));  // 结果:11
console.log(obj2.c(1)); // 结果:11

3.箭头函数不绑定arguments,取而代之用rest参数…解决 每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。但是箭头函数并没有此对象。

代码语言:javascript
复制
function A(a){
  console.log(arguments);
}
A(1,2,3,4,5,8);  //  [1, 2, 3, 4, 5, 8, callee: ƒ, Symbol(Symbol.iterator): ƒ]


let B = (b)=>{
  console.log(arguments);
}
B(2,92,32,32);   // Uncaught ReferenceError: arguments is not defined


let C = (...c) => {
  console.log(c);
}
C(3,82,32,11323);  // [3, 82, 32, 11323]

4.其他区别 (1).箭头函数不能Generator函数,不能使用yeild关键字。 (2).箭头函数不具有prototype原型对象。 (3).箭头函数不具有super。 (4).箭头函数不具有new.target。

总结: (1).箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply() (2).普通函数的this指向调用它的那个对象

参考 https://www.cnblogs.com/biubiuxixiya/p/8610594.html https://www.softwhy.com/article-9330-1.html

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148732.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 箭头函数和普通函数的区别
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档