Underscore.js中_.delay函数源码slice参数2与apply行作用疑问
问题1解答
- 你的理解完全正确,
Array.prototype.slice.call(arguments, 2)首先实现了把类数组对象arguments转为普通数组的效果。 - 参数2是
slice方法的起始截取索引,确实代表从arguments的下标为2的位置开始截取内容,最终得到的数组就是[arguments[2], arguments[3], ...]。 - 之所以从第2位开始截取,是因为
_.delay的前两个入参是固定的:第一位是要延迟执行的目标函数func,第二位是延迟等待的毫秒数wait,从第三个入参开始都是要传递给func的执行参数,截取后拿到的刚好是所有需要传给目标函数的入参集合。
问题2解答
func.apply(this, args)的作用是调用目标函数func,同时做两个关键处理:
- 用
apply方法把之前收集到的参数数组args拆成单个参数,依次传入func作为执行入参,保证外部传入的额外参数都能正确传递给延迟执行的函数。 - 把
func执行时的内部this指向绑定为当前上下文的this,尽可能保证func执行时的上下文和_.delay被调用时的上下文一致,避免this指向异常。
内容的提问来源于stack exchange,提问作者Monde
相关产品推荐
相关产品推荐

