比如有这个代码
var x=[];
var res=0;
for(var i=0;i<100000;i++){
x[i]=i;
}
$.each(x,function(i){
res=i;
});
alert(res);我这里测试他每次都是99999 也就是先each完毕 才会 alert
那么 是否当each的fun里 足够慢的时候 就会出现 先alert 后才执行完each呢?jjqueryeach阻塞

解决方案 »

  1.   

    不会。。each遍历和for语句遍历差不多,只是增加了回调的执行// args is for internal usage only
    each: function( obj, callback, args ) {
    var name,
    i = 0,
    length = obj.length,
    isObj = length === undefined || jQuery.isFunction( obj ); if ( args ) {
    if ( isObj ) {
    for ( name in obj ) {
    if ( callback.apply( obj[ name ], args ) === false ) {
    break;
    }
    }
    } else {
    for ( ; i < length; ) {
    if ( callback.apply( obj[ i++ ], args ) === false ) {
    break;
    }
    }
    } // A special, fast, case for the most common use of each
    } else {
    if ( isObj ) {
    for ( name in obj ) {
    if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
    break;
    }
    }
    } else {
    for ( ; i < length; ) {
    if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
    break;
    }
    }
    }
    } return obj;
    },
      

  2.   

    js是直线形运行脚本。fun里再慢也得它运行完,直到卡死。
    只有在ajax设置异步时才会分开执行
      

  3.   

    each里面其实还是for循环,只不过加了个回调函数而已
      

  4.   

    callback而已,不过单线程是一定的
      

  5.   

    你把alert写在了callback的外面,当然是each之后才alert一次了。
    var res=0;
    for(var i=0;i<100;i++){
    x[i]=i;
    }
    $.each(x,function(i){
    res=i;
    alert(res);
    });