首页 > 代码库 > return false
return false
DOM的事件传播有两个类型,一个是捕获(从父节点到子节点),一个是冒泡(从子节点到父节点),所以一个事件触发时可以有多个处理器去处理它,DOM标准约定了return false后就会阻止事件继续传播。
jQuery中each里面用return false代替break;return ture 代替continue。
function a(){
if(true){
//
return true;
}
}
在一个function里有一个each,在each里某种条件 成立的话,就把这个function返回true或者false。
但是在each代码块内不能使用break和continue,要实现break和continue的功能的话,要使用其它的方式
break----用return false;
continue --用return ture;
所以在each里想使用return true给这个function返回时,其实只是让each继续执行而以
连each都没有中断,所以function也就不能return了 。
由于jQuery的each是通过循环调用回调函数的方式实现的,所以在函数内写的break只适用于函数内部的逻辑,并不能对函数外层的循环起到作用,所以break不管用。具体可以分析一下jQuery的源码,下面以jQuery2.1.4中的each方法举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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时,才会退出循环。
return false
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。