1. 程式人生 > >JavaScript return false

JavaScript return false

highlight 冒泡 函數 作用 遍歷 兩個 .com .html back

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方法舉例:

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

博客出處:http://www.cnblogs.com/wyaocn/p/5827369.html

JavaScript return false