试图理解延迟函数的语法

Posted

技术标签:

【中文标题】试图理解延迟函数的语法【英文标题】:Trying to understand the syntax of delay function 【发布时间】:2016-03-17 18:35:49 【问题描述】:

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

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

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

为了让延迟函数起作用,为什么我们需要使用切片方法并调用(arguments,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.

我不确定可选参数“稍后记录”如何在这里工作,因为我也不确定 bind 方法在这里如何工作?你能给我一个更简单的例子吗?

【问题讨论】:

它所做的只是删除前两个参数,函数和时间,然后在给定时间后调用传入的函数,在前两个之后传入任何其他参数。跨度> 【参考方案1】:

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: ');

【讨论】:

以上是关于试图理解延迟函数的语法的主要内容,如果未能解决你的问题,请参考以下文章

Go语言函数语法下篇

Go语言函数语法下篇

试图弄清楚 MASM 语法

理解 Swift 中 map 函数的简写闭包语法

理解 gradle 任务定义中的 groovy 语法

无法理解 boost python 函数导出中的语法