jquery 的 each 是阻塞式的吗?
比如有这个代码
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呢? j jquery each 阻塞
[解决办法]
不会。。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;
},
[解决办法]
js是直线形运行脚本。fun里再慢也得它运行完,直到卡死。
只有在ajax设置异步时才会分开执行
[解决办法]
each里面其实还是for循环,只不过加了个回调函数而已
[解决办法]
callback而已,不过单线程是一定的
[解决办法]
你把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);
});