"这个"的价值是多少?在setTimeout下面的匿名函数中?

时间:2015-09-12 19:21:37

标签: javascript underscore.js this

我已经将underscore.js延迟函数重写为如下所示。它在修改使用apply()之后起作用,但我不完全理解"这个"在apply中指向setTimeout中的匿名函数。

_.delay = function(func, wait) {
   var args = Array.prototype.slice.call(arguments, 2);
     setTimeout(function() {
       return func.apply(this, args);
     }, wait);
 };

1 个答案:

答案 0 :(得分:1)

thiswindowsetTimeout()函数中引用setInterval()。 如果你想避免这种副作用,你可以"绑定" this的价值:

_.delay = function(func, wait, thisArg) {
   var args = Array.prototype.slice.call(arguments, 2);
   thisArg = thisArg || this;//assume a default value
   setTimeout(function() {
     return boundFunction.apply(thisArg, args);
   }, wait);
};

然后,您可以将this的值传递给_.delay(),或者默认为_

另一种方法是在将函数传递给_.delay()之前绑定它:

function a() {console.log(this);}
_.delay(a.bind({foo:'bar'}), 1000); //prints {foo: 'bar'}