我注意到构造函数中有一些奇怪的行为。这段代码无限循环,我不知道为什么。
function thing(){
this.start=function (){console.log(this.msg)};
this.msg="Starting...";
setInterval(() => {this.start()},1000)
}

<button onclick="new thing()">Create a new thing!</button>
&#13;
我已经搜索了这个,但我发现没有解释这一点。请有人帮助我并回答为什么会这样。
感谢。
答案 0 :(得分:2)
您确定要使用 FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref= database.getReference();
database.setPersistenceEnabled(true);
ref.keepSynced(true);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot != null) {
long version = (long) dataSnapshot.child("version").getValue();
// This is the value which doesn't update for the first time.
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
而不是setInterval
吗?前者将每1秒调用setTimeout
,而后者将在1秒后调用一次,
请查看以下链接,解释这两个功能:
this.start
https://developer.mozilla.org/pl/docs/Web/API/Window/setInterval
setInterval
https://developer.mozilla.org/pl/docs/Web/API/Window/setTimeout
正确的片段应该是:
setTimeout
&#13;
function thing(){
this.start=function (){console.log(this.msg)};
this.msg="Starting...";
setTimeout(this.start(), 1000)
}
&#13;
答案 1 :(得分:1)
这是因为setInterval()
设置了......你已经猜到了! Interval
,它会按照您设置的时间间隔继续执行它的内容(在此示例中为1000ms
)。
setTimeout()
将在设定的延迟时间延迟执行一次。
答案 2 :(得分:1)
是setInterval将在1秒后调用,因此如果你想停止需要使用clearInterval。
答案 3 :(得分:1)
来自W3School文档:
定义和用法
setInterval()方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。
setInterval()方法将继续调用该函数,直到调用clearInterval()或窗口关闭。
setInterval()返回的ID值用作clearInterval()方法的参数。
提示:1000毫秒= 1秒。
提示:要在指定的毫秒数后执行一次函数,请使用setTimeout()方法。
所以你可能想要这样做:
function thing(){
this.start=function (){console.log(this.msg)};
this.msg="Starting...";
setTimeout(() => {this.start()}, 1000)
}
&#13;
<button onclick="new thing()">Create a new thing!</button>
&#13;
答案 4 :(得分:1)
setInterval
实际上应该启动一个间隔(定时循环)。
此外,您正在执行该功能而不是绑定它:)常见错误。
onclick="new thing()"
https://developer.mozilla.org/de/docs/Web/API/WindowTimers/setInterval
您的代码可以更简单地完成:
const start = () => setTimeout( () => console.log(200), 1000)
<button onclick="start">Start!</button>
在大多数情况下,您不需要JS中的对象。作为第一类对象的函数是JS的一个非常强大的功能。