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時,纔會退出循環。

相關文章
相關標籤/搜索