Javascript 如何返回需要2个参数和1个参数的函数

Javascript 如何返回需要2个参数和1个参数的函数,javascript,call,apply,Javascript,Call,Apply,我相信我已经解决了这个问题,但是有一个问题,就是只向我的最终函数传递一个参数来返回结果。问题是 例如,考虑函数GETBUIN。当在值3上运行两次时,产生12,如下所示 getDouble(3) => 6 getDouble(6) => 12 让我们命名新函数createIterator,我们应该能够使用createIterator获得相同的结果,如下所示: var doubleIterator = createIterator(getDouble, 2); // This mean

我相信我已经解决了这个问题,但是有一个问题,就是只向我的最终函数传递一个参数来返回结果。问题是

例如,考虑函数GETBUIN。当在值3上运行两次时,产生12,如下所示

getDouble(3) => 6
getDouble(6) => 12
让我们命名新函数createIterator,我们应该能够使用createIterator获得相同的结果,如下所示:

var doubleIterator = createIterator(getDouble, 2); // This means, it runs *getDouble* twice
doubleIterator(3) => 12
为了简单起见,createIterator的所有函数输入都是返回少量的函数,迭代次数始终是整数

以下是我的答案:

function getDouble(num){
    newNum = num * 2
    return newNum
}


var createIterator = function (func, n) {   
    var results = [];
    var result;
    result = func;
    results.push(func);

    for(var i = 0;i < n - 1; i++){
        results.push(results[i] * 2);   
    }

    return results;

};

// var doubleIterator = createIterator(getDouble(3),2).slice(-1).pop();

您可以使用createIterator的以下定义:

函数createIterator(func,n){
返回函数(arg){
对于(变量i=0;iconsole.log(双迭代器(3));//=>12
您可以使用apply而不是call,因为apply将数组作为其参数多次调用可能不是一个好主意。。另外,您正在创建一个全局
newNum
@PaulS.,您使用这个函数引用哪个函数?关于全局newNum——这是OP的代码。我现在已经删除了它。
doubleIterator
;第一次调用将把
n
带到
-1
,以后的调用将循环到负无穷大dect,@PaulS.,谢谢你发现了这一点。更正。
function doubleIterator(d){
    // var n;
    // createIterator.call(this,n)
    return createIterator(getDouble(d),n).slice(-1).pop();
}


console.log(doubleIterator);