【问题标题】:node.js capture closure variablesnode.js 捕获闭包变量
【发布时间】:2016-01-28 14:30:18
【问题描述】:

我正在开发一个简单的调试函数,该函数评估一个闭包并获取 node.js 中的所有相关变量名称。它应该在运行时工作。那么,有没有办法自动捕获闭包中的所有变量名? 比如下面这种情况下是否可以知道“b”、“c”、“d”变量的存在?

var d=3;
function a(c){ 
   var b = true;
   eval( debug(/* need to access in runtime something like ["b","c","d"] */) );

}
function debug(vars){ 
   var txt = "";
   for(var i=0; i<vars.length; loop++){
      txt+="console.log('"+vars[i]+":' + " vars[i] + ");"
   }
   return txt
}

我可以使用蛮力扫描 a.toString() 以搜索所有“var”和所有 arguments 参数,但是是否有本地函数可以找到它或特殊变量(类似于 callee. vars) 来查找闭包中的变量名称?

我知道“eval”是一个很大的不,但我只在开发环境中使用它。

【问题讨论】:

  • 在运行时?不。您可以进行静态分析并检测您的代码,但这也只能让您走这么远。
  • 你试过debugger;吗?
  • Felix,我试图避免这种分析,但恐怕这是唯一的方法 :( Xufox,我不是在寻找使用任何外部工具调试代码的方法也不以任何方式停止代码,只是为了 console.log 闭包上的变量。

标签: javascript node.js variables closures


【解决方案1】:

是的,有。只需返回一个函数来关闭 c 并将另一个 var 设置为该闭包。像这样。

function a(c){ 
   var b = true;
   return function () {
       console.log(c);
    };
}

var d = a(false); // undefined
d(); // false

【讨论】:

  • 谢谢colecmc,但我不想存储c变量值。相反,我需要知道它的名字。我将编辑我的问题以更好地解释它。
猜你喜欢
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多