javascript中setInterval与setTimeout中this的问题以及对于闭包的一些理解

本文探讨了JavaScript中使用setInterval时this指针的问题,提出了使用bind和闭包两种解决方案,并通过示例代码进行了解释。闭包的概念也被详细阐述,帮助读者理解如何在类中实现私有变量。

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

  最近写代码是碰到一个setInterval中的this指针的问题,代码如下:

var testClass = function () {
    this.name = "test";
    this.intervalId = null;
};

testClass.prototype.start = function () {
    this.intervalId = setInterval(this.sayHello, 1000);
}

testClass.prototype.sayHello = function () {
    console.log("Hello, " + this.name);
}

var test = new testClass();
test.start(); //输出“Hello,”

  当时第一反应就是this指针出问题了,但是不知道怎么解决,因为setInterval中传入的只是函数的名字,并不是调用,所以我们没法通过保存this的方法来实现,经过多番搜索,找到如下几种解决方案。

  1. 使用bind函数,会有浏览器兼容问题

this.intervalId = setInterval(this.sayHello.bind(this), 1000);

  bind函数类似call函数,都会改变上下文的this,但是bind返回的是函数,而call则会调用函数。

  2.使用闭包,保存this变量

this.intervalId = setInterval(function () {
var self = this; return function() { self.sayHello();//有位大神解释闭包,闭包就是可以访问另一个函数内部而它自身外部的变量的函数,js类中的私有变量等就是通过闭包来实现权限控制的 }; }.call(this), 1000);

  个人理解闭包其实就是在一个函数内有可以被外部访问的内部函数,能被访问的内部函数就是闭包,例如:

var a = function () {
    function b() {//不是闭包,因为外部不能访问它
        console.log(b);
    };
    return function c() {//闭包,外部可以访问
        console.log(c);
    }
}

  

  理解的不知道对不对,敬请指教!!

  

转载于:https://www.cnblogs.com/DARKDD/p/4279595.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值