请考虑以下代码:
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中是否可以实现?
答案 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/
编辑:我看到了另一个答案,他们将参数作为数组传递,我的答案单独传递它们。也许有理由避免将参数作为数组传递,所以我会保留这个答案它可以帮助任何人。