将循环定义为要重用的函数

Han*_*com 3 javascript loops function

我有以下几次使用的循环:

    for(var i = 0; i < $options.length; i++) { //...
Run Code Online (Sandbox Code Playgroud)

每次我想要使用该循环时,我不想重复使用该代码,而是将其转换为函数.

我尝试了以下但是得到一个错误"我是未定义的"

function optionLoop( $options, callback) {
    for(var i = 0; i < $options.length; i++) {
        callback();
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

    optionLoop($options, function(){
         // Do it
    });
Run Code Online (Sandbox Code Playgroud)

但这不起作用.如何将循环转换为可重用的函数,我可以将其传递给另一个函数?还有一个问题......我是不是因为想要这样做而疯狂?

谢谢!

Jos*_*ber 6

您应该将循环值传递给回调:

function optionLoop( $options, callback) {
    for(var i = 0; i < $options.length; i++) {
        callback(i, $options[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,当你调用它时,在你的回调函数中使用它们:

optionLoop($options, function(index, value) {
});
Run Code Online (Sandbox Code Playgroud)

这是小提琴:http://jsfiddle.net/vGHK5/


更新:如果您希望能够从函数中突破循环,请使用:

function optionLoop( $options, callback) {
    for(var i = 0; i < $options.length; i++) {
        if ( callback(i, $options[i]) === false ) break;
    }
}
Run Code Online (Sandbox Code Playgroud)

false如果你想打破,那就回来吧.

这是小提琴:http://jsfiddle.net/vGHK5/1/

  • @ j-man86 - 你需要改变`optionLoop()`函数来测试返回值:`if(false === callback(i,$ options [i])){break; }`.然后你可以在你的回调中返回`false`来停止循环. (2认同)