function each ( obj, callback, args ) {
var value,
i = 0,
length = obj.length,
isArray = isArraylike( obj );
if ( args ) {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.apply( obj[ i ], args );
if ( value === false ) {
break; //这样写可以在指定位置调出循环
}
}
} else {
for ( i in obj ) {
value = callback.apply( obj[ i ], args );
if ( value === false ) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
} else {
for ( i in obj ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
}
}
return obj;
},
var arr = [
{
name: "111", age: 26
},
{
name: "222", age: 7
},
{
name: "333", age: 99
},
{
name: "444", age: 54
}
];
$.each(arr, function(i, value) {
if(value.age == 99) {
return false
}
});
如上面这种情况,那么循环到age = 99那一项的时候,回调的结果为false,那么源码的value是回调的结果为false,则循环到当前项的时候,循环会到此结束,不会再继续往下循环。