闭包中的this

本文探讨了JavaScript中this关键字的指向问题,在不同上下文中的表现及其解决方法,并介绍了闭包的概念及如何调整闭包中this的指向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在不使用闭包的情况下

  • this指向的调用该函数的对象
var name = "小刚";
var obj = {
    name:"小明",
    fn:function () {
        console.log(this.name,this);
    }
}
obj.fn() // 小明  obj

闭包函数中this的指向

  • 在使用了闭包的情况下,this会丢失自己原本的指向
  • 下面的例子中this 实际上是指向的window
var name = "小刚";
var obj = {
    name:"小明",
    fn:function () {
          return function () {
            console.log(this.name);
        }
    }
}
obj.fn()()  // 小刚 window

如何修改闭包函数中 this 的指向

1. 使用一个变量保存 当前 this(简单易懂的方法)

    var name = "小刚";
    var obj = {
        name:"小明",
        fn:function () {
            var that = this ; 
              return function () {
                console.log(that.name);
            }
        }
    }
obj.fn()() // 小明

2. 使用 call 或 apply方法

 var obj = {
    name: "小明",
    fn: function() {
        var foo = function() {
            console.log(this.name);
        }
        foo.call(this)
        return foo
    }
}
obj.fn()() // 小明

3. 使用 bind 方法

var obj = {
    name: "小明",
    fn: function() {
        return function() {
            console.log(this.name);
        }.bind(this)
    }
}
obj.fn()() // 小明

4. 使用ES6的箭头函数
- 箭头函数中的this完全使用了一套新的规则

var obj = {
    name: "小明",
    fn: function() {
        return () => {
            console.log(this.name)
        }
    }
}
obj.fn()()  // 小明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值