回复:A JavaScript Fn 接受未知的#args - 调用 Fn wrks - 通过 var 调用不
Re: A JavaScript Fn that accepts unknown # args - call Fn wrks - call via var does not
学习如何编写接受未知数量参数的 JS Fn。
function foo(a,b,c,d){
//do something
//return something
}
var bar = function () {
var arg = Array.from(arguments);
var lastIndx = arg.length;
var parArray = arg.slice(1,lastIndx);
var argMnts = arguments[0];
return arguments[0].apply(this, parArray);
};
调用栏因此有效:
bar(foo,1,4,3,7);
这样称呼它:
var tester = bar(foo,1,4,3,7);
tester();
结果:tester 不是函数
根据我的研究,我怀疑它可能与 "this" 或参数的范围有关,所以我将它们的值分配给变量,替换变量,结果是一样的。
一些见解将不胜感激。
在您的示例中,调用 bar()
returns 无论调用 foo(...)
的结果是什么。所以,如果你想能够做到这一点:
var tester = bar(foo,1,4,3,7);
tester();
然后,foo(...)
必须 return 另一个可以分配给 tester
的函数,然后可以再次调用。
如果,而不是上面的方式,如果您不希望 bar(foo, ...)
实际调用 foo()
,而是希望它 return 一个函数,然后调用foo()
使用适当的参数,您可以将 bar()
更改为:
var bar = function () {
var args = Array.from(arguments);
var fn = args.shift();
var self = this;
return function() {
return fn.apply(self, args);
}
};
var tester = bar(foo,1,4,3,7);
tester();
此处,bar()
return 是一个函数,(调用时)将调用 foo()
。
或者,在正确的 ES6 支持下,您可以使用剩余参数;
var bar = function (fn, ...args) {
var self = this;
return function() {
return fn.apply(self, args);
}
};
或者,您可以将 .bind()
与剩余参数和扩展运算符一起使用:
var bar = function (fn, ...args) {
return fn.bind(this, ...args);
};
学习如何编写接受未知数量参数的 JS Fn。
function foo(a,b,c,d){
//do something
//return something
}
var bar = function () {
var arg = Array.from(arguments);
var lastIndx = arg.length;
var parArray = arg.slice(1,lastIndx);
var argMnts = arguments[0];
return arguments[0].apply(this, parArray);
};
调用栏因此有效:
bar(foo,1,4,3,7);
这样称呼它:
var tester = bar(foo,1,4,3,7);
tester();
结果:tester 不是函数
根据我的研究,我怀疑它可能与 "this" 或参数的范围有关,所以我将它们的值分配给变量,替换变量,结果是一样的。
一些见解将不胜感激。
在您的示例中,调用 bar()
returns 无论调用 foo(...)
的结果是什么。所以,如果你想能够做到这一点:
var tester = bar(foo,1,4,3,7);
tester();
然后,foo(...)
必须 return 另一个可以分配给 tester
的函数,然后可以再次调用。
如果,而不是上面的方式,如果您不希望 bar(foo, ...)
实际调用 foo()
,而是希望它 return 一个函数,然后调用foo()
使用适当的参数,您可以将 bar()
更改为:
var bar = function () {
var args = Array.from(arguments);
var fn = args.shift();
var self = this;
return function() {
return fn.apply(self, args);
}
};
var tester = bar(foo,1,4,3,7);
tester();
此处,bar()
return 是一个函数,(调用时)将调用 foo()
。
或者,在正确的 ES6 支持下,您可以使用剩余参数;
var bar = function (fn, ...args) {
var self = this;
return function() {
return fn.apply(self, args);
}
};
或者,您可以将 .bind()
与剩余参数和扩展运算符一起使用:
var bar = function (fn, ...args) {
return fn.bind(this, ...args);
};