Javascript 理解“的用法”;这";在两种不同的情况下

Javascript 理解“的用法”;这";在两种不同的情况下,javascript,Javascript,我不明白为什么本例中的“this”返回“NaN”: 在这个例子中,它指的是“this.value”: 我知道在第一种情况下,“this”指向窗口对象,我只是不明白为什么会这样。setInterval函数几乎看起来像这样: function setInterval(callback, time, ...args) { // native complicated code callback(...args); } 这里重要的是调用(回调(…)),因为JS通过调用函数的方式确定上下文

我不明白为什么本例中的“this”返回“NaN”:

在这个例子中,它指的是“this.value”:


我知道在第一种情况下,“this”指向窗口对象,我只是不明白为什么会这样。

setInterval函数几乎看起来像这样:

 function setInterval(callback, time, ...args) {
   // native complicated code
   callback(...args);
 }
这里重要的是调用(
回调(…)
),因为JS通过调用函数的方式确定上下文。在第二个示例中,
bar
的上下文是
inst
,您称之为
inst.bar()
,因此直接告诉js这是什么。如果你直接调用一个函数,例如

 const bar = inst.bar; 
 bar(); // call without context

您不指定上下文,因此,
默认为
窗口

内部
设置间隔
将是全新的,它不知道
计数器
。您可以使用
bind
将上下文
this
传递给setInterval

函数计数器(){
this.num=0;
this.timer=setInterval(函数add(){
这个.num++;
console.log(this.num);
}.绑定(本),5000);
}

Counter()
谢谢您的回答。但是SetInterval的上下文不应该是计数器吗,因为它是在它内部调用的吗?@hernannope,js不是这样工作的。
 function setInterval(callback, time, ...args) {
   // native complicated code
   callback(...args);
 }
 const bar = inst.bar; 
 bar(); // call without context