【问题标题】:Invoking dynamically passed arguments to a function - JavaScript [duplicate]调用动态传递给函数的参数 - JavaScript [重复]
【发布时间】:2015-11-24 05:51:30
【问题描述】:

我有以下功能:

function foo(f, k) {
    if (f.length > 2) {
        // how do I access the third element of f? 
        // it can be a function retry() or undefined.
        // var retry = f.arguments[2]; ?? 
        // retry();
        // console.log(f.arguments) returns undefined
    } else {
        k();
    }
}

var retry = function() { console.log("hi"); };

foo(function(x, y) { console.log(x+y); }, 
    function() { console.log("hello"); });

foo(function(x, y, retry) { console.log("retry present"); },
    function() { console.log("hello"); });

如果第三个参数传入,我需要调用它。我可能将23 参数传递给f。如果存在第三个参数,我如何访问它?

【问题讨论】:

  • 参数不是可以访问的。它是第 n 个参数的名称声明。您可以通过在函数中使用该名称来访问该参数。
  • @philippe:不,retry 不是函数。这只是一个变量名。在外部范围内还有一个函数retry,但它与您作为f 传递给foo 的匿名函数的retry 参数无关。
  • "我可能有 2 或 3 个参数被传递给 f" - 不完全是。在您当前的代码中,您还没有将任何参数传递给f。有一个函数f 可以为其命名参数接受2 或3 个参数。拥有该函数f,您可以确定命名参数的数量 (f.length),但除此之外没有其他内容 - 没有可访问的值,因为还没有人调用该函数。
  • @philippe:那你想访问什么?是否要获取第三个参数名称的字符串"retry"
  • @philippe:您可能想重新阅读我的解释。没有“第三个元素”是可以调用的函数。你的要求毫无意义。

标签: javascript function callback


【解决方案1】:

你可以试试这样的:

编辑 1

根据@Bergi 的评论更新了代码

function print(b) {
    return (b);
}

function notify(a, b) {
    var args = arguments;
    var params = args[0].toString().split("(")[1].split(")")[0].split(",");
    if(params[2]){
    	console.log(eval(params[2])(b))
    }
}

(function () {
    var a = 10,
        b = 20;
    notify(function (a, b, print) {}, b);
})()

【讨论】:

  • 很好,但这不是我要找的……你能在问题的行中做更多的事情吗?
  • @philippe 我已经更新了我的答案。希望对你有帮助
  • Rajesh,f 中变量参数的数量,而不是 foo。请查看问题
  • 让我重复一下我的理解。您有一个函数foo,它需要一个函数f 作为参数。这个函数f可以有可变参数,如果它有第三个参数,你想调用它,但是在foo里面。对吗?
  • 正是....我写的代码片段解释得很好。
猜你喜欢
  • 2012-11-13
  • 2013-07-09
  • 1970-01-01
  • 2011-03-28
  • 2011-10-05
  • 2019-07-21
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多