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