我知道setTimeouts window调用的,所以这个this.name中的this指向window。但是name没定义过输出了1,2是什么原因呢?求大神指教……
我知道setTimeouts window调用的,所以这个this.name中的this指向window。但是name没定义过输出了1,2是什么原因呢?求大神指教……
计数器的问题我就不说了,楼上已经说了,楼主写的method会立即执行,我想说下this的问题,在setTimeout中this确实指向window,但是你这么调用的话,立即执行,this是指向obj的。看下面代码弹出的name值就是window.name了
var name = 111;
var obj = {
name: '222',
method: function() {
console.log(this);
console.log(this.name);
}
}
setTimeout(obj.method, 1000); // 1s之后输出111
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
6 回答1.2k 阅读
undefined
才是你输出的this.name
,下面的输出其实是chrome的控制台在计数器的输出。补充,
此外,你的setTimeout的调用方法也不对,这样的写法其实是立即执行,传入的第一个参数应该是函数形式才是正常的调用。
这里的输出具体应该是插入到js主进程的任务队列数量。
当然其他情况下并不一定是,也有可能是变量值,或是一个函数的返回值。