Javascript 是否建议在.each()中放置一个函数?

Javascript 是否建议在.each()中放置一个函数?,javascript,jquery,scope,Javascript,Jquery,Scope,我正在遍历一组DOM元素。每次迭代都会多次使用helper()函数,如下所示: $(".myclass").each(function() { var arg; helper(); // do stuff function helper() { // do helpful stuff with arg } }); 如上所述,将helper()函数包含在function()块中是否是一种不良做法?我应该使用: $(".myclass").e

我正在遍历一组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
函数实例


编辑:如果有人在寻找答案的好解释-

在第一个示例中,您确实创建了
助手
函数的一个实例,而在第二个示例中,只有一个实例用于所有迭代


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

在第一个示例中,您确实创建了
助手
函数的一个实例,而在第二个示例中,只有一个实例用于所有迭代


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

是的,这将反复声明函数(每次循环运行时)

您可以将函数放在更高的范围内,如第二个示例中所示,或者如果希望保持范围更干净,可以围绕函数执行闭包(尽管这在何时执行外部闭包、执行多少次等方面有影响):


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

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

您可以将函数放在更高的范围内,如第二个示例中所示,或者如果希望保持范围更干净,可以围绕函数执行闭包(尽管这在何时执行外部闭包、执行多少次等方面有影响):


请注意,尽管这仍然有可能不止一次地定义helper,而不是在每次迭代中。

这不利于重用-如果您想在其他地方使用该helper函数,它只存在于回调的范围内-这不利于重用-如果您想在其他地方使用该helper函数,它只存在于回调的作用域中
$(...).each((function() {

    var helper = function(arg) {
        //do helpful stuff with arg
    }

    return function() {
        var arg;
        helper(arg);
        //do stuff
    };

}());