JS箭头函数学习

        箭头函数是 ES6 中引入的一种新的函数声明语法,它提供了更简洁的语法形式,并且具有一些特点和注意事项。

使用方法:

箭头函数的基本语法形式如下:

// 无参数的箭头函数
const func = () => {
    // 函数体
};

// 有参数的箭头函数
const func = (param1, param2) => {
    // 函数体
};

// 箭头函数的简写形式,如果函数体只有一条语句,可以省略大括号
const func = () => expression;

// 箭头函数的返回值是表达式,如果省略大括号,则返回值就是该表达式的结果
const func = () => value;

使用场景:

  1. 箭头函数适合用于定义匿名函数,尤其适合作为回调函数传递给高阶函数。
  2. 箭头函数可以简化函数的书写,特别是对于只有一行代码的函数。
  3. 在需要绑定 this 的场景中,箭头函数可以继承父级作用域的 this 值,避免了传统函数中 this 指向问题的困扰。下面通过代码示例来说明这点:
    // 传统函数中的 this 指向问题
    const obj = {
        name: 'Alice',
        greet: function() {
            setTimeout(function() {
                console.log('Hello, ' + this.name); // 此处的 this 指向全局对象,输出 undefined
            }, 1000);
        }
    };
    
    obj.greet();
    
    // 使用箭头函数解决 this 指向问题
    const obj2 = {
        name: 'Bob',
        greet: function() {
            setTimeout(() => {
                console.log('Hello, ' + this.name); // 此处的 this 指向 obj2,输出 'Hello, Bob'
            }, 1000);
        }
    };
    
    obj2.greet();
    

        在第一个示例中,使用传统函数时,setTimeout 中的函数会将 this 指向全局对象,导致无法访问到 obj 对象的属性。而在第二个示例中,使用箭头函数时,箭头函数继承了 greet 方法中的 this 值,所以能够正确访问到 obj2 对象的属性。

        这就是箭头函数在需要绑定 this 的场景中的作用,通过继承父级作用域的 this 值,避免了传统函数中 this 指向问题的困扰。

特点:

  1. 箭头函数没有自己的 thisargumentssuper 或 new.target,它们会从定义时所在的外层作用域继承这些值。
  2. 不能用箭头函数来定义构造函数,因为箭头函数没有 prototype 属性。
  3. 箭头函数不能通过 new 关键字来调用,因为它没有 this 绑定。
  4. 箭头函数不能作为 Generator 函数使用。

注意事项:

  1. 在使用箭头函数时,要注意箭头函数的 this 是静态的,指向定义时所在的作用域的 this,而不是动态绑定的。
  2. 避免在需要动态绑定 this 的情况下使用箭头函数,比如在对象方法中定义函数时。
  3. 尽量避免滥用箭头函数,应根据实际需求选择合适的函数声明方式。

补充:

        通过上面的说明相信大家都已经发现了:在箭头函数中,无法直接使用全局对象 this,因为箭头函数没有自己的 this,它会继承父级作用域的 this 值。那我们如果想要使用全局的this该怎么做呢?可以通过在箭头函数外部保存全局对象的引用,然后在箭头函数内部使用这个引用来访问全局对象。比如下面这个示例:

const globalThis = this; // 保存全局对象的引用

const arrowFunction = () => {
    console.log('Global this:', globalThis);
};

arrowFunction(); // 在箭头函数中访问全局 this

        在这个示例中,我们在箭头函数外部保存了全局对象的引用 globalThis,然后在箭头函数内部通过 globalThis 来访问全局对象。这样就可以在箭头函数中间接地访问全局对象了。

        需要注意的是,虽然可以通过这种方式在箭头函数中间接地访问全局对象,但这并不是推荐的做法。箭头函数的设计初衷是为了避免 this 指向问题,因此在箭头函数中最好不要依赖于全局对象 this如果确实需要在箭头函数中使用全局对象,最好考虑将全局对象的引用传递给箭头函数,而不是直接依赖于全局的 this

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值