javascript - JavaScript 中有没有一种方法可以获取当前定义的所有局部变量的列表?

标签 javascript

假设我有一个函数:

function() {
  var a = 12;
  var b = 15;
  var c = list_of_all_local_variables
}

在 JavaScript 中有没有一种方法可以获取当前范围内所有变量的列表,所以 list_of_all_local_variables 会包含类似 {a:12, b:13} 的内容,甚至只是 ['a','b']

谢谢!

最佳答案

非常快速尝试 AST 解决方案。

(这是我第一次玩 Esprima ,所以要温柔!我绝对确定这可以改进)

<style>
pre {
    font-size: 8pt;
    font-family: Lucida Console, monospace;
}
</style>

<pre id="ast"></pre>

<script src="esprima.js"></script>

<script>
function getvars(fnStr) {
    function _getvars(body) {
        if (!body) {
            return;
        }
        if (body.length) {
            for (var i = 0; i < body.length; i++) {
                _getvars(body[i]);
            }
        } else if ("VariableDeclaration" === body.type) {
            for (var i = 0; i < body.declarations.length; i++) {
                vars.push(body.declarations[i].id.name);
            }
        } else if (body.body) {
            _getvars(body.body);
        }
    }
    var vars = [];
    var syntax = esprima.parse(fnStr);
    _getvars(syntax.body);
    document.getElementById("ast").innerHTML = JSON.stringify(syntax, null, 4);
    return vars;
}

function myfn() {
    var a = 1, b = 2, ob = { name: "ob" };
    for (var i = 0; i < 10; i++) {
        var s = "" + i;
    }
    getvars(myfn.toString()).forEach(function(___var) {
        var ___ob = eval(___var);
        console.log(___var, (typeof ___ob), eval(___ob));
    });
}

myfn();
</script>

将打印到控制台:

a number 1 local-vars-in-function.html:44
b number 2 local-vars-in-function.html:44
ob object Object {name: "ob"} local-vars-in-function.html:44
s string 9 local-vars-in-function.html:44

如果您只需要 var 名称,而不需要值,则不需要内联报告。

关于javascript - JavaScript 中有没有一种方法可以获取当前定义的所有局部变量的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18612198/

相关文章:

javascript - HtmlWebpackPlugin 删除模板 div

javascript - jQuery 全局化。将货币单位作为 C 格式的参数传递

javascript - 在多个固定高度的表格中自动滚动

javascript - JavaScript onclick 中的 "this"是什么?

javascript - 如何在 textarea 中为不同的语言设置不同的 maxLength

javascript - 如何从另一个网页检索具有特定 ID 的元素?

javascript - 如何为元素提供位置值以在所有屏幕分辨率下完美对齐?

javascript - 无法在 React Native 中呈现 onPress TouchableOpacity View

javascript - 尝试在页面刷新时更改背景图像,遇到问题

javascript - 尝试获取 Jquery 中两个日期之间的周数