开发者社区> 问答> 正文

这里使用setInterval()函数,为什么会出错?

已解决

image.png 因为使用了关键字new构造,Count()函数中的this绑定到一个新的对象,并且赋值给a。通过console.log打印a.num,输出0。image.png 为了每过一秒将a.num的值加1,使用setInterval()函数。image.png 输出结果: var b = new Counter();// NaN// NaN// NaN... 然后我发现,每隔一秒都会有一个NaN打印出来,而不是累加的数字。到底哪里错了呢?

展开
收起
游客dndzx3dbvf2jq 2022-08-09 22:12:54 443 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    首先函数setInterval没有被某个声明的对象调用,也没有使用new关键字,再之没有使用bind, call和apply。setInterval只是一个普通的函数。实际上setInterval里面的this绑定到全局对象的。我们可以通过将this打印出来验证这一点:

    function Counter() {
        this.num = 0;
        this.timer = setInterval(function add() {
            console.log(this);
        }, 1000);}
    var b = new Counter();
    
    

    会发现,整个window对象被打印出来。 使用如下命令停止打印: clearInterval(b.timer);

    回到之前的函数,之所以打印NaN,是因为this.num绑定到window对象的num,而window.num未定义。

    2022-08-09 23:35:36
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载