使用eval的javascript调试功能

时间:2017-10-12 02:03:20

标签: javascript closures

在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),但这不会那么有趣;)

1 个答案:

答案 0 :(得分:1)

真的不需要这么严厉的做法。你总是可以这样做:

function debug(a) {
  console.log(a);
}

或者您可以定义一个没有功能的空版本,以便在某些运行模式下禁用它。

使用它很容易:

debug({ a: a, b: b });

使用ES6,您可以更简洁地完成此任务:

debug({ a, b });

不容易。

您使用eval的想法将失败,因为a是一个仅由于let声明而存在于该特定范围内的变量。这意味着其他功能无法访问它。