javascript - 非递归代码递归

标签 javascript jquery function recursion tree

下面的代码应该创建一个简单的“树”,但它变得递归并崩溃。

        var cnt = 0;
        var page = {
            properties: {},
            folders: [],
            items: []
        };

        function createPage() {
            var ret = $.extend({}, page);
            ret.cnt = cnt++;
            return  ret;
        }
        var tree = createPage();

        function addFolders(f, n) {
            for (var i = 0; i < n; i++) {
                f.push(createPage());
            }
        }


        function createData() {
            addFolders(tree.folders, 4);
            for (var i = 0; i < tree.folders.length; i++) {
                addFolders(tree.folders[i].folders, i);
            }
        }

        createData();

有人可以解释一下为什么会发生这种情况吗?

最佳答案

squint 是对的,脚本总是推送到同一个 folders 数组,导致长度不断增加并且永远不会跳出循环。您可以将 createPage 函数更改为:

function createPage() {
  return {
      properties: {},
      cnt: cnt++,
      folders: [],
      items: []
  };
}

关于javascript - 非递归代码递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43954371/

相关文章:

javascript - 如何检索 x 形式的值 :select in orbeon forms on client side (in JavaScript)

javascript - POST 上的 CORS angular js + restEasy

javascript - 使用 Angular Material 上传文件

javascript - 向一个 jQuery/DOM 元素添加一个函数

javascript - 如何从 $(document).ready 外部调用函数

javascript - ReactJS - 无法读取未定义的属性 'preventDefault'

javascript - 在 JavaScript 中压缩多个 if 语句

javascript - Ajax Post 请求失败

javascript - jQuery 更新引用 DOM 元素的变量

sql-server - 在用户定义函数中创建、删除和插入临时表