javascript - 如何理解 restArgs 这个函数的作用?
本文介绍了javascript - 如何理解 restArgs 这个函数的作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
var restArgs = function(func, startIndex) {
startIndex = startIndex == null ? func.length - 1 : +startIndex;
return function() {
var length = Math.max(arguments.length - startIndex, 0);
var rest = Array(length);
for (var index = 0; index < length; index++) {
rest[index] = arguments[index + startIndex];
}
switch (startIndex) {
case 0: return func.call(this, rest);
case 1: return func.call(this, arguments[0], rest);
case 2: return func.call(this, arguments[0], arguments[1], rest);
}
var args = Array(startIndex + 1);
for (index = 0; index < startIndex; index++) {
args[index] = arguments[index];
}
args[startIndex] = rest;
return func.apply(this, args);
};
};
var delay = restArgs(function(func, wait, args) {
return setTimeout(function(){
return func.apply(null, args);
}, wait);
});
var sayHi = function(){
console.log("Hello");
}
delay(sayHi, 200, 1, 2, 3);
另外: 为什么 restArgs 的返回函数中 arguments 的值是 [sayHi, 200, 1, 2, 3] ?
解决方案
restArgs接受一个函数fn1和startIndex,返回另一个函数fn2
把调用fn2时传入的参数从startIndex开始封装成一个数组,然后调用fn1
例如startIndex = 1的话
fn2(a, b, c)就相当于fn1(a, array),其中array = [b,c]
function foo(a, b, c) {}
delay(foo, 1000, d, e, f);
就相当于
setTimeout(function () {
foo(d, e, f);
}, 1000);
这篇关于javascript - 如何理解 restArgs 这个函数的作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文