javascript函数的返回值

javascript函数的返回值,javascript,jquery,function,return,Javascript,Jquery,Function,Return,我的$(document).ready(function(){}中有一段代码,内容如下: getInitial(len); 其中len是一个整数 function getInitial(number){ number--; if(number < 0) return var $items = $(balls()); $items.imagesLoaded(function(){ $container .masonry('re

我的
$(document).ready(function(){}
中有一段代码,内容如下:
getInitial(len);
其中len是一个整数

function getInitial(number){
    number--;
    if(number < 0) return
    var $items = $(balls()); 
    $items.imagesLoaded(function(){
        $container
        .masonry('reloadItems')
        .append( $items ).masonry( 'appended', $items, true );
    });
    getInitial(number);
}
我的问题是如何从
balls()
函数中的imagesLoaded()方法获取
ret
以返回到
getInitial()中的
$items

我希望没有更多的困惑。

尝试以下方法:

var imgPreload = new Image();
var ret = '<div class="box" style="width:18%;">'
          +'<p>'+$test[$iterator][1][2]['name']+'</p>'
          +'<img src="'+imgPreload.src+'"/>'
          +'<div id=boxBottom>'+Math.floor($test[$iterator][0]*100)+'%</div>'
          +'</div>'; 
imgPreload.src = 'scripts/php/timthumb.php?src='+$test[$iterator][2]+'&q=100&w=300';
$(".imgHolder").append('<img src="'+imgPreload.src+'"/>');
//console.log(imgPreload);
$(".imgHolder").imagesLoaded();
return ret;
var imgPreload=new Image();
var ret=''
+“”+$test[$iterator][1][2][name']+'

” +'' +''+数学地板($test[$iterator][0]*100)+'% +''; imgPreload.src='scripts/php/timtumb.php?src='+$test[$iterator][2]+'&q=100&w=300'; $(“.imgHolder”)。追加(“”); //console.log(imgPreload); $(“.imgHolder”).imagesLoaded(); 返回ret;
由于函数异步运行,因此需要回调函数。不能让它返回值。通过传递回调函数返回值

function getInitial(number){
    number--;
    if(number < 0) return
    // Can't do the following, it's asynchronous
    // var $items = $(balls()); 

    // Do this instead
    balls(function(html) {
        var $items = $(html);
        $items.imagesLoaded(function(){
            $container
            .masonry('reloadItems')
            .append( $items ).masonry( 'appended', $items, true );
        });
        getInitial(number);
    })
}

function balls(callback){
    $iterator -= 1;
    if($iterator < 0){
        var $boxes = $( '<div class="box">No more games!</div>' );
        $container.append( $boxes ).masonry( 'appended', $boxes, false );   
        return; 
    }
    var imgPreload = new Image();
    var ret; 
    imgPreload.src = 'scripts/php/timthumb.php?src='+$test[$iterator][2]+'&q=100&w=300';
    $(".imgHolder").append('<img src="'+imgPreload.src+'"/>');
    //console.log(imgPreload);
    $(".imgHolder").imagesLoaded(function(){
        callback('<div class="box" style="width:18%;">'
            +'<p>'+$test[$iterator][1][2]['name']+'</p>'
            +'<img src="'+imgPreload.src+'"/>'//Replace this with the one below when timthumb is whitelisted
            +'<div id=boxBottom>'+Math.floor($test[$iterator][0]*100)+'%</div>'
            +'</div>');
    });
}
函数getInitial(数字){ 数字--; 如果(数字<0)返回 //无法执行以下操作,它是异步的 //var$items=$(balls()); //改为这样做 球(函数(html){ var$items=$(html); $items.imagesLoaded(函数(){ $container .圬工(‘重新加载的项目’) .append($items).砌石('appended',$items,true); }); getInitial(数字); }) } 函数球(回调){ $iterator-=1; if($iterator<0){ var$box=$(“不再玩游戏!”); $container.append($BOXS).MARCHISE('appended',$BOXS,false); 返回; } var imgPreload=新图像(); var-ret; imgPreload.src='scripts/php/timtumb.php?src='+$test[$iterator][2]+'&q=100&w=300'; $(“.imgHolder”)。追加(“”); //console.log(imgPreload); $(“.imgHolder”).imagesLoaded(函数(){ 回调(“” +“”+$test[$iterator][1][2][name']+'

” +''//当timthumb被列入白名单时,将其替换为以下内容 +''+数学地板($test[$iterator][0]*100)+'% +''); }); }
回调是从异步函数返回值的方式


可能仍然存在问题,代码非常混乱。但这应该让您朝着正确的方向前进。

好吧,它甚至不在函数中。到目前为止,返回根本不在函数中。但由于它是异步的,因此从该函数返回的东西无论如何都不会有帮助。没有进一步的上下文,很难提供帮助。@JTorres是的,如果这让任何人感到困惑,我很抱歉。
imagesLoaded
的回调函数似乎是异步的,在这种情况下,您不能立即返回值。@JTorres当别人的代码明显不完整时,我几乎不假设它的上下文。特别是对于异步代码,上下文是至关重要的。对于考试来说例如,Ricardo的回答忽略了异步性质,并立即返回HTML——这可能没问题,但它发生在加载图像之前,这是非常不同的行为。@DaveNewton我很清楚,否则为什么要在函数中使用它,我认为你太挑剔了。问题很清楚,ret为什么不这样做返回语句时包含正确的值reached@JTorres它确实回答了问题。您的答案无效。无法(同步)返回值如果异步获取值,则从函数返回。回调是从异步函数返回值的唯一方法。我确实尝试过此方法,但结果与我的OP是同一个问题,我已更新了我的OP,实际上是为了更好地澄清我的问题。为什么会被否决?这是正确的答案,至少在可能的范围内是正确的从原始问题中挖掘。+1抵消。@Adola你没有尝试过这个,我可以向你保证。你的示例仍然在调用
balls()
,并且没有传递回调函数。重新阅读答案,并使用异步代码更新它。@DaveNewton谢谢你,即使在我们友好的讨论之后,你仍然表现出爱:)@JuanMends的区别在于
ret
在加载图像之前接收它的值。在他的代码中,
ret
在加载图像后接收它的值,但它已经返回。它看起来确实可以工作,因为在
ret
中没有使用任何从
imagesLoaded
处理程序设置的内容。那么为什么OP从
imagesLoaded
调用它呢?
function getInitial(number){
    number--;
    if(number < 0) return
    // Can't do the following, it's asynchronous
    // var $items = $(balls()); 

    // Do this instead
    balls(function(html) {
        var $items = $(html);
        $items.imagesLoaded(function(){
            $container
            .masonry('reloadItems')
            .append( $items ).masonry( 'appended', $items, true );
        });
        getInitial(number);
    })
}

function balls(callback){
    $iterator -= 1;
    if($iterator < 0){
        var $boxes = $( '<div class="box">No more games!</div>' );
        $container.append( $boxes ).masonry( 'appended', $boxes, false );   
        return; 
    }
    var imgPreload = new Image();
    var ret; 
    imgPreload.src = 'scripts/php/timthumb.php?src='+$test[$iterator][2]+'&q=100&w=300';
    $(".imgHolder").append('<img src="'+imgPreload.src+'"/>');
    //console.log(imgPreload);
    $(".imgHolder").imagesLoaded(function(){
        callback('<div class="box" style="width:18%;">'
            +'<p>'+$test[$iterator][1][2]['name']+'</p>'
            +'<img src="'+imgPreload.src+'"/>'//Replace this with the one below when timthumb is whitelisted
            +'<div id=boxBottom>'+Math.floor($test[$iterator][0]*100)+'%</div>'
            +'</div>');
    });
}