gpt4 book ai didi

javascript - 为什么clearinterval会改变这段代码中的内容?

转载 作者:行者123 更新时间:2023-12-02 17:39:22 25 4
gpt4 key购买 nike

var interval = setInterval(function (){
console.log("Hello world");
}, 1000);

var thing = interval;
console.log(thing);
clearInterval(interval);
console.log("interval cleared");
console.log(thing);

thing 在清除 interval 之前和之后打印的内容不同,我不明白为什么。请暂停一下吗?

编辑:抱歉,我应该说得更清楚。我使用的是node.js,这是上面代码的输出:

{ _idleTimeout: 1000,
_idlePrev:
{ _idleNext: [Circular],
_idlePrev: [Circular],
msecs: 1000,
ontimeout: [Function: listOnTimeout] },
_idleNext:
{ _idleNext: [Circular],
_idlePrev: [Circular],
msecs: 1000,
ontimeout: [Function: listOnTimeout] },
_idleStart: 1394616963526,
_onTimeout: [Function: wrapper],
_repeat: true }
interval cleared
{ _idleTimeout: -1,
_idlePrev: null,
_idleNext: null,
_idleStart: 1394616963526,
_onTimeout: null,
_repeat: false,
ontimeout: null }

为什么thing会受到clearInterval的影响?

最佳答案

两个变量intervalthing都引用同一个Timer对象。当您调用 clearInterval 时,它会修改该对象,这就是 console.log 显示的内容。

它类似于以下代码:

var obj1 = { a : 3 };
var obj2 = obj1;
obj1.a = 4;
console.log(obj2);

这将记录{ a : 4 }。如果希望两个变量引用不同的对象,则需要克隆该对象;参见

What is the most efficient way to deep clone an object in JavaScript?

关于javascript - 为什么clearinterval会改变这段代码中的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22347023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com