只是为了好玩,我正在寻找一种方法来创建具有以下行为的函数数组
:
array() // []
array(2) // ugly function thing
array(2)() // [2]
array(2)(3)() // [2,3] etc
我能到达的最接近的是
function array(x) {
if (x == null)
return []
return function() {
// same as above?!
// I don't want some inelegant solution involving a lot of additional parameters
}
}
ECMA5 有办法做到这一点吗?如果不是,请证明语法无法容纳这样的函数。
最佳答案
是的,“同上”。这是通过“递归”1 调用解决的:
function makeArrayAppender(arr) {
return function array() {
var args = Array.prototype.slice.call(arguments);
if (!args.length)
return arr;
else
return makeArrayAppender(arr.concat(args));
};
}
var array = makeArrayAppender([]);
1:由于该函数是从返回的“thunk”函数调用的,而不是从调用本身调用的,因此它并不是真正的递归。它更像是尾部调用优化的函数,连续手动调用而不填充堆栈
关于javascript - 链式数组创建者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262616/