【问题标题】:Js count nested functionsjs计数嵌套函数
【发布时间】:2020-10-16 08:21:16
【问题描述】:

我在下面有类似的东西。如何获取有关函数 power() 中嵌套了多少函数的信息。正则表达式会起作用吗?

function power(n){
    function power2(){
        function power3(){
            function power4(){
                return n*n;
            }
            return power4();
        }
        return power3();
    }
    return power2();    
}
let number = power(1);
console.log(number)

【问题讨论】:

  • 你想如何统计它们 - 静态的?通过执行它们?另外,为什么你需要那个 - 你确定不是an XY problem
  • 要静态分析源代码,获取一个解析器,将此代码转换为 AST,然后遍历它以查看最深的函数嵌套的深度。
  • 有点小技巧,但是 -> power.toString().match(/return /g).length 可以在这里工作。但是对于更强大的解决方案,就像提到的遍历 AST 会更好。
  • @VLAZ 我只想显示嵌套函数的数量。我正在学习 JS,这是我要解决的任务之一。
  • 这是一个新手任务吗?它对于初学者来说太复杂了,或者如果它 only 用于此功能并且需要使用初学者工具完成,那么它与静态分析(仅解析字符串)完全无关完成不是你应该做的事情。

标签: javascript nested-function


【解决方案1】:

您可以使用power.toString() 将函数作为字符串获取

然后统计单词function的出现次数(-1因为外层函数也有)

function power(n){
    function power2(){
        function power3(){
            function power4(){
                return n*n;
            }
            return power4();
        }
        return power3();
    }
    return power2();    
}
var str = power.toString();
var count = (str.match(/function/g) || []).length -1;

还有一个fiddle

【讨论】:

  • 请记住,这是一个非常幼稚的解决方案
  • const power4 = () => n * n; return power4();const randomString = "hello, this is a function" 会使计数不准确。
  • @Liam 是的,完全清楚这一点。但是,如果 OP 只想计算示例中的嵌套函数,它就可以完成这项工作。
  • 评论不用于扩展讨论;这个对话是moved to chat
【解决方案2】:
let nested = 0;
function power(n){
    nested++;
    function power2(){
        nested++;
        function power3(){
            nested++;
            function power4(){
                nested++;
                return n*n;
            }
            return power4();
        }
        return power3();
    }
    return power2();    
}
let number = power(5);
console.log(nested)
// To exclude the main function remove nested++ right under function power(n){

【讨论】:

  • 对象是什么?如果这是一个初学者任务,应该很容易。他/她说“我只想显示嵌套函数的数量。”
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多