JavaScript - 如果函数作为参数传递,是否可以在计算函数之前将其作为字符串返回?

时间:2015-06-05 19:43:52

标签: javascript function arguments argument-passing

请考虑以下代码:

function add(a,b) { return a + b; }

function displayFunction(func) {
  console.log(_WHAT_SHOULD_GO_HERE_); // I want to log 'func' to the console
}

displayFunction(add(2,3)); // I want this to log "add(2,3)"

这在JavaScript中是否可以实现?

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式:

displayFunction("add(2,3)");

现在您可以使用eval()方法进行评估。我不建议使用eval()方法,但您可以使用它。

function displayFunction(func) {
  console.log(func);   // return 'add(2,3)'
  console.log(eval(func));  // return 5
}

答案 1 :(得分:1)

另一种方法是将函数和参数作为单独的参数传递,并在日志之后调用函数:

function add(a,b) { return a + b; }

function displayFunction(func) {       
    console.log(arguments);    
    func.apply(null, arguments[1]);    
}

displayFunction(add,[2,3]);

答案 2 :(得分:0)

另一种方法是将自己记录在函数的顶部。

在你的代码中,你可以做这样的事情

this.add = function(a,b) { return a + b; }

function displayFunction(funcName) {
    var args = [].slice.call(arguments,1);
    console.log("calling " + funcName + "(" + args + ")");
    console.log(this[funcName].apply(this,args));
}

displayFunction.call(this,"add",2,3);

jsfiddle:https://jsfiddle.net/29v2nrtt/1/

编辑:我看到了另一个答案,他们将参数作为数组传递,我的答案单独传递它们。也许有理由避免将参数作为数组传递,所以我会保留这个答案它可以帮助任何人。