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

JavaScript - If a function is passed as an argument, can it be returned as a string before the function is evaluated?

考虑以下代码:

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 中完成吗?

您可以按如下方式传递:

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

现在您可以使用eval()方法来评估了。我不推荐使用 eval() 方法,但你可以使用它来实现。

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

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

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

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

displayFunction(add,[2,3]);

执行此操作的另一种方法是自己将其记录在函数的顶部。

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

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/

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