jquery中each 跳出为什么用return false
我看了js文件中的each方法,可是仍然想不明白,为什么不能用break,而用returnfalse...
我看了js文件中的each方法,可是仍然想不明白,为什么不能用break,而用returnfalse
展开
2个回答
展开全部
由于jQuery的each是通过循环调用回调函数的方式实现的,所以在函数内写的break只适用于函数内部的逻辑,并不能对函数外层的循环起到作用,所以break不管用。具体可以分析一下jQuery的源码,下面以jQuery2.1.4中的each方法举例:
each: function( obj, callback, args ) {
var value,
i = 0,
length = obj.length,
isArray = isArraylike( obj );//如果obj是一个类似数组的结构(可用for遍历的),则为true
if ( args ) {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.apply( obj[ i ], args );//循环调用
if ( value === false ) {//如果返回值全等于(包括类型和值)false,就退出循环
break;
}
}
} else {
for ( i in obj ) {//这种是对象的,需要用for in遍历
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;
}
由源码可以看出,只有回调函数返回的值为false时,才会退出循环
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询