以下代码应创建一个简单的“树”,但它会递归并崩溃。

        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();

有人可以解释为什么会这样吗?

最佳答案

斜视是正确的,脚本始终将其推入相同的folders数组,从而导致长度不断增加并且永远不会超出循环范围。您可以将createPage函数更改为此:

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

08-06 15:16