js如何动态调用不确定参数的函数

1
2
3
4
5
//需求:想通过传函数体和参数去调用,但不确定参数(就是说不想写死参数)
//比方m这个函数可能会改成需要4个,8个参数,但不想改动态调用它的函数
var m = function(a, b, c) {
return a + b + c;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//this is solution
//apply+arguments 把参数数组动态传递给函数体
function makeFunc() {
var args = Array.prototype.slice.call(arguments);
var func = args.shift();
return function() {
return func.apply(null, args.concat(Array.prototype.slice.call(arguments)));
};
}
m2 = makeFunc(m, 4, 5); //缺的参数也可以在附加(注意concat的调用,叠加了参数数组)
console.log(m2(6, 7)); //多余的参数7不会被用到
//简化
//Array.prototype.slice可以用[].slice替换
//题外话:意外遇到一个上下文调用的错误=_=!
var p = console.log
p(1); //error: Uncaught TypeError: Illegal invocation(在控制台查看)
p.apply(console, [1]); //ok
//小心的坑:
// makeFunc的apply设置上下文是null,所以有依赖上下文的函数需考虑传不依赖上下文的函数体,必要时可以构造匿名函数
//遇到的问题!(没搞明白)
// function(){$('#app').show();} //显示弹框,直接传$('#app').show 会导致无法响应
如有疑问,请留言或邮件newbvirgil@gmail.com
本文链接 : http://blog.newbmiao.com/2016/08/17/how-to-call-a-function-with-unsure-number-params.html