是否建议在.each()中放入一个函数

Is it recommended to put a function inside .each()?

本文关键字:一个 函数 each 是否      更新时间:2023-09-26

我正在循环遍历DOM元素的集合。每次迭代都会多次使用helper()函数,如下所示:

$(".myclass").each(function() {
    var arg;
    helper();
    // do stuff
    function helper() {
        // do helpful stuff with arg
    }
});

helper()函数包含在如上所述的function()块中是不是一种糟糕的做法?我应该使用:

$(".myclass").each(function() {
    var arg;
    helper(arg);
    // do stuff
});
function helper(arg) {
    // do helpful stuff with arg
}

在第一个例子中,每个匹配的.myclass元素在内存中是否都有自己的helper函数实例?

编辑:如果有人在寻找答案的好解释-http://net.tutsplus.com/tutorials/javascript-ajax/stop-nesting-functions-but-not-all-of-them/

您在第一个示例中创建了helper函数的实例,而在第二个示例中,所有迭代只使用一个实例。

因此,为了避免创建多个相同的函数,您可以在第一个示例中内联代码,也可以使用第二种方法。

是的,这将一次又一次地重新声明函数(每次循环运行时)。

你可以像第二个例子一样把函数放在更高的范围内,或者如果你想保持范围更干净,你可以围绕函数做一个闭包(尽管这在外部闭包何时执行、执行次数等方面都有影响):

$(...).each((function() {
    var helper = function(arg) {
        //do helpful stuff with arg
    }
    return function() {
        var arg;
        helper(arg);
        //do stuff
    };
}());

但请注意,这仍然有可能使helper被定义不止一次,只是不是在每次迭代中。