试图理解延迟函数的语法

时间:2015-12-11 18:45:33

标签: javascript callback

延迟功能:将函数延迟给定的毫秒数,然后使用提供的参数调用它。

是由下划线js编写的。注释来源:

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

为了使延迟函数工作,为什么我们需要使用slice方法和调用(参数,2),这部分做了什么? 如果我错了请纠正我。延迟函数首先返回setTimeout来执行延迟,并且setTimeout函数返回func.apply(null,args)以将所有信息从一个函数传递到另一个函数?但是什么是" null"在这儿干?

当我们使用延迟调用函数时,它说:

var log = _.bind(console.log, console);
_.delay(log, 1000, 'logged later');
=> 'logged later' // Appears after one second.

我不确定可选参数后来如何记录'在这里工作,因为我不知道绑定方法在这里如何工作?你能给我一个更简单的例子吗?

1 个答案:

答案 0 :(得分:0)

setTimeoutwindow上下文中执行代码,因此您必须注意在回调函数中为this提供正确的引用。 _.bind为你做到了。

var MyObject = function() {

  this.myVariable = 'accessible';

  this.myMethod = function(message) {
    console.log((this === window));
    console.log(message + this.myVariable);
  }

}

var myObject = new MyObject();

// it will throw an error, because the this.myVariable isn't accessible
_.delay(myObject.myMethod, 1000, 'the correct scope is: ');

// this will be binded to the correct scope
_.delay(_.bind(myObject.myMethod, myObject), 1000, 'the correct scope is: ');