JavaScript 递归元素创建失败

标签 javascript recursion

我不明白为什么会失败:

var recursiveElementGenerator = function (elem_spec) {
    elem = document.createElement(elem_spec.tag);

    if (elem_spec.children) {
        for (var i=0; i<elem_spec.children.length; i++) {
            var c_elem = elem_spec.children[i];
            var n_elem = recursiveElementGenerator(c_elem);
            alert(elem===n_elem);
            elem.appendChild(n_elem);
        };
    };
    return elem;
};

elem_spec 对象具有 tag 和 Children 属性,后者是类似对象的数组。

这会失败,因为递归调用返回的元素与递归调用之前创建的元素相同。我不明白 - 类似的版本可以工作,通过从数组上的 pop() 调用获取其标签值链,然后将其传递到递归调用中。

最佳答案

尝试使用:

var elem = document.createElement(elem_spec.tag);

而不是:

elem = document.createElement(elem_spec.tag);

不使用 var 关键字会使您的变量在全局范围内运行。使用它将在本地范围内创建变量,从创建的行到函数定义的末尾。

关于JavaScript 递归元素创建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5333572/

相关文章:

java - 使用 StringTokenizer 递归解析字符串

javascript - 检查条件是否符合以下任一条件

javascript - 通过 AJAX 调用将返回的 JSON 分配给本地存储

javascript - 如何使用 JavaScript chop 文本区域的内容?

java - 递归深度优先搜索算法 - 一般情况/基本情况/初始情况是什么?

javascript - 递归函数返回后的函数调用

来自 shell 脚本的 Javascript

javascript - 编译 Typescript 而不丢失 node_modules 路径?

c++ - 使用递归函数C++进行乘法

php - 用于从分层数组生成平面(但带有嵌套标题)数组的递归函数