从深度封闭中返回

Return from deep closures

本文关键字:返回 深度      更新时间:2023-09-26

如果我有一些代码,例如 -

    loadImages(pos - 1,function(){
        loadImages(pos,function(){
            loadImages(pos + 1);    
        });
    });
function loadImages(key){   
    $('.slide:nth-child('+key+') .imgholder').each(function(){
        par = $(this).parent();
        imgHold = $(this);
        if (loaded_images.indexOf($(imgHold).data('img-src')) > 0){
            return true;
        } else {        
            $(imgHold).attr('src',$(imgHold).data('img-src')).on('load', function() {
                if (!$(imgHold).hasClass('fgimg')){                 
                    $(par).css('background-image','url('+$(imgHold).data('img-src')+')');                   
                } else {
                    $(imgHold).css('visibility','visible');
                }                   
                // How do I return loadImages from here??
            })      
        }
    })
}

我想在此函数完成后触发代码,因此我需要在我的//注释行返回 true。这样做的官方/最佳方法是什么?

你需要

一个回调:

function loadImages(key, callback){   
    $('.slide:nth-child('+key+') .imgholder').each(function(){
        par = $(this).parent();
        imgHold = $(this);
        if (loaded_images.indexOf($(imgHold).data('img-src')) > 0){
            return true;
        } else {        
            $(imgHold).attr('src',$(imgHold).data('img-src')).on('load', function() {
                if (!$(imgHold).hasClass('fgimg')){                 
                    $(par).css('background-image','url('+$(imgHold).data('img-src')+')');                   
                } else {
                    $(imgHold).css('visibility','visible');
                }                   
                callback(true);
                // How do I return loadImages from here??
            })      
        }
    })
}

用法:

loadImages(key, function(yourVar){
    console.log(yourVar); // true
});

您必须注意未调用回调的情况。

更多信息: http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/