在C ++中,我们可以像这样编写预处理器宏:
#define DEBUG(x) cout << '>' << #x << ':' << x << endl;
int a=1;
DEBUG(a) //prints "a:1"
我试图在javascript中做类似的事情
var DEBUG= function(name){
return function() {
console.log(name+": ",eval(name))
}
}
{
let a=1;
DEBUG('a')() //a is undefined
}
我想知道是否有任何方法可以“内联”函数或者使用闭包来做一些聪明的事情,它允许在调用范围内评估DEBUG。我知道我可以打电话给DEBUG('a',a),但这不会那么有趣;)
答案 0 :(得分:1)
真的不需要这么严厉的做法。你总是可以这样做:
function debug(a) {
console.log(a);
}
或者您可以定义一个没有功能的空版本,以便在某些运行模式下禁用它。
使用它很容易:
debug({ a: a, b: b });
使用ES6,您可以更简洁地完成此任务:
debug({ a, b });
不容易。
您使用eval
的想法将失败,因为a
是一个仅由于let
声明而存在于该特定范围内的变量。这意味着其他功能无法访问它。