return false

DOM的事件传播有两个类型,一个是捕获(从父节点到子节点),一个是冒泡(从子节点到父节点),因此一个事件触发时能够有多个处理器去处理它,DOM标准约定了return false后就会阻止事件继续传播。数组

jQuery中each里面用return false代替break;return ture 代替continue。app

function a(){函数

     if(true){spa

         //code

         return true;对象

     }  事件

}ci

在一个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了 。 
get

 

因为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时,才会退出循环。

相关文章
相关标签/搜索