JavaScript中forEach循环中的回调/函数范围

时间:2012-11-13 14:42:42

标签: javascript foreach scope

我从Jed Schmidt发现了dōmo,它似乎对在node.js中创建服务器端HTML很有用。

基本的东西有效,但我不知道如何在数组上使用像forEach()之类的循环来创建像表行这样的东西。我创建了一个基本的例子:

var domo = require('domo');

var fruits = [];
fruits.push("banana", "apple", "peach");

var document = DOCUMENT({type: "html"},
  HTML(
    HEAD(
      TITLE("bla"),
      SCRIPT({src: "/script.js"})
      ),
    BODY(
      TABLE(
        THEAD( TR( TD("Predicate"), TD("Object"))),
        TBODY(
          fruits.forEach(function(value, index) {
            console.log("I am in forEach");
            console.log("Value: "+value);
            console.log("Key: "+index);
            TR(
              TD(index),
              TD(value)
              )
          })
          )
        )

      )
    )).outerHTML;

console.log(document);

这导致此输出:

<!DOCTYPE html>
<html>
    <head>
        <title>
            bla
        </title>
        <script src="/script.js" type="text/javascript">
</script>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <td>
                        Predicate
                    </td>
                    <td>
                        Object
                    </td>
                </tr>
            </thead>
            <tbody>
                <!--undefined-->
            </tbody>
        </table>
    </body>
</html>

如果我得到了正确的结果,我无法在forEach循环中访问domo的范围。这是正确的解释吗?这样做的正确工作方式是什么?

解决方案

感谢Bergi的提示和Jed Schmidt的修正,这个片段现在有效(domo&gt; = 0.5.5):

TBODY( fruits.map(function(value, index) {
  return TR(
    TD(String(index)),
    TD(value)
    );
}))
)

1 个答案:

答案 0 :(得分:3)

迭代数组后,

forEach返回undefined

我不知道这些函数是否接受数组作为参数,但您可以尝试map

TBODY( fruits.map(function(value, index) {
    console.log("I am in map");
    console.log("Value: "+value);
    console.log("Key: "+index);
    return TR(
//  ^^^^^^ dont forget this
        TD(index),
        TD(value)
    );
}))