# defer
# Description
推迟调用 func,直到当前堆栈清理完毕。 调用时,任何附加的参数会传给 func
# Params
(func, ...args)
# Return
number
# Code
function defer(func, ...args) {
if (typeof func !== 'function') {
throw new TypeError('Expected a function')
}
return setTimeout(func, 1, ...args)
}
# Analyze
- 判断 func 是否为 function,如果不是,则报出类型错误
- 如果 func 是一个 function,则调用 setTimeout 将其添加进任务队列,在主线程调用完成后,处理任务队列中的任务
- defer 会返回定时器编号
# Remark
- window.setTimeout MDN (opens new window) 方法设置一个定时器,该定时器在定时器到期后执行一个函数或指定的一段代码。
- 并发模型与事件循环 MDN (opens new window)
- 彻底吃透 JavaScript 执行机制 (opens new window)
- Event loops (opens new window)
# Example
defer(() => {console.log('defer')})
console.log('before')
// before
// defer
← defaultsDeep delay →