【问题标题】:JavaScript recursive Element creation failsJavaScript 递归元素创建失败
【发布时间】:2011-03-17 10:14:23
【问题描述】:

我不明白为什么会失败:

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 对象具有标签和子属性,后者是相似对象的数组。

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

【问题讨论】:

  • 我会看看elem_spec 参数。你能发布一个样本吗?

标签: javascript recursion


【解决方案1】:

尝试使用:

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

代替:

elem = document.createElement(elem_spec.tag);

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

【讨论】:

  • +1 好收获!全局变量已在递归调用中使用。这就是为什么n_elem 总是指向与elem 全局变量相同的对象。
  • 是的,这是一个很好的时刻——谢谢——我今天早上试图投票/接受,但 stackoverflow 出现了一些故障,无法接受我的输入
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2011-09-27
  • 1970-01-01
  • 2023-04-01
  • 2012-02-17
相关资源
最近更新 更多