Lodash原始碼分析-delay.js

DrMoon發表於2017-12-18

前言

本系列使用 lodash 4.17.4版本

此方法沒有對其他方法進行引用

正文

原始碼

/**
 * Invokes `func` after `wait` milliseconds. Any additional arguments are
 * provided to `func` when it's invoked.
 *
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to delay.
 * @param {number} wait The number of milliseconds to delay invocation.
 * @param {...*} [args] The arguments to invoke `func` with.
 * @returns {number} Returns the timer id.
 * @example
 *
 * delay(text => console.log(text), 1000, 'later')
 * // => Logs 'later' after one second.
 */
function delay(func, wait, ...args) {
  if (typeof func != 'function') {
    throw new TypeError('Expected a function')
  }
  return setTimeout(func, +wait || 0, ...args)
}

export default delay
複製程式碼

解析

引數

該方法可接受多個引數:

第一個引數是一個將被延遲執行的函式;

第二個引數是上一個引數將被延遲執行的毫秒數;

第三個以及之後的引數是第一個引數引用的引數,即將傳入第一個函式引數的引數。

返回值

該方法返回帶有延遲函式的定時器ID

方法解析

該方法首先會判斷傳入方法的第一個引數的型別是否是函式function型別,若不是會丟擲一個錯誤表明傳入該方法的第一個引數不是函式function型別,否則執行下一步。

之後該方法將返回一個定時器ID給呼叫該方法的地方。這個定時器會將傳入該方法的第一個函式引數作為定時器將執行的函式,傳入該方法的第二個引數作為定時器延遲執行其內函式的毫秒數,傳入該方法的其餘引數都將作為引數傳入第一個函式引數。

示例

delay(function(val) { console.log(val) }, 1000, "I love Javascript!");
--> 1
------ 延遲 1000ms 後 ------
--> I love Javascript!
複製程式碼

總結

該方法可看做一個延時函式,你可以制定延遲的時間,延遲執行的函式以及傳入其中的引數。

相關連結:

每日原始碼分析 - lodash(clamp.js)

每日原始碼分析 - lodash(slice.js)

每日原始碼分析-Lodash(uniq.js)

本文章來源於午安煎餅計劃Web組 - 殘陽

相關文章