1
+ < script type ="text/javascript " src ='jquery-1.8.2.min.js '> </ script >
2
+ < script type ="text/javascript ">
3
+ $ . each ( [ 1 , 2 , 3 ] , function ( i , n ) {
4
+ console . log ( '当前下标为:' + i ) ;
5
+ console . log ( '当前值为:' + n ) ;
6
+ } ) ;
7
+
8
+ var each = function ( ary , callback ) {
9
+ for ( var i = 0 , l = ary . length ; i < l ; i ++ ) {
10
+ callback . call ( ary [ i ] , i , ary [ i ] ) ; // 把下标和元素当作参数传给callback 函数
11
+ }
12
+ } ;
13
+
14
+ each ( [ 1 , 2 , 3 , 4 ] , function ( i , n ) {
15
+ alert ( [ i , n ] ) ;
16
+ } ) ;
17
+
18
+ var compare = function ( ary1 , ary2 ) {
19
+ if ( ary1 . length !== ary2 . length ) {
20
+ throw new Error ( 'ary1 和ary2 不相等' ) ;
21
+ }
22
+ each ( ary1 , function ( i , n ) {
23
+ if ( n !== ary2 [ i ] ) {
24
+ throw new Error ( 'ary1 和ary2 不相等' ) ;
25
+ }
26
+ } ) ;
27
+ alert ( 'ary1 和ary2 相等!' ) ;
28
+ }
29
+
30
+ compare ( [ 1 , 2 , 3 ] , [ 1 , 2 , 4 ] ) ; // throw new Error ( 'ary1 和ary2 不相等' );
31
+
32
+ var Iterator = function ( obj ) {
33
+ var current = 0 ;
34
+ var next = function ( ) {
35
+ current += 1 ;
36
+ } ;
37
+ var isDone = function ( ) {
38
+ return current >= obj . length ;
39
+ } ;
40
+ var getCurrItem = function ( ) {
41
+ return obj [ current ] ;
42
+ } ;
43
+ return {
44
+ next :next ,
45
+ isDone :isDone ,
46
+ getCurrItem :getCurrItem
47
+ }
48
+ } ;
49
+
50
+ //再看看如何改写compare 函数:
51
+ var compare1 = function ( iterator1 , iterator2 ) {
52
+ while ( iterator1 . isDone ( ) && iterator2 . isDone ( ) ) {
53
+ if ( iterator1 . getCurrItem ( ) !== iterator2 . getCurrItem ( ) ) {
54
+ throw new Error ( 'ary1 和ary2 不相等' ) ;
55
+ }
56
+ iterator1 . next ( ) ;
57
+ iterator2 . next ( ) ;
58
+ }
59
+ alert ( 'iterator1 和iterator2 相等.' ) ;
60
+ }
61
+ var iterator1 = Iterator ( [ 1 , 2 , 3 ] ) ;
62
+ var iterator2 = Iterator ( [ 1 , 2 , 3 ] ) ;
63
+ compare1 ( iterator1 , iterator2 ) ; // 输出:iterator1 和iterator2 相等
64
+
65
+ $ . each = function ( obj , callback ) {
66
+ var value ,
67
+ i = 0 ,
68
+ length = obj . length ,
69
+ isArray = isArraylike ( obj ) ;
70
+ if ( isArray ) { // 迭代类数组
71
+ for ( ; i < length ; i ++ ) {
72
+ value = callback . call ( obj [ i ] , i , obj [ i ] ) ;
73
+ if ( value === false ) {
74
+ break ;
75
+ }
76
+ }
77
+ } else {
78
+ for ( i in obj ) { // 迭代object 对象
79
+ value = callback . call ( obj [ i ] , i , obj [ i ] ) ;
80
+ if ( value === false ) {
81
+ break ;
82
+ }
83
+ }
84
+ }
85
+ return obj ;
86
+ } ;
87
+
88
+ var reverseEach = function ( ary , callback ) {
89
+ for ( var l = ary . length - 1 ; l >= 0 ; l -- ) {
90
+ callback ( l , ary [ l ] ) ;
91
+ }
92
+ } ;
93
+
94
+ reverseEach ( [ 0 , 1 , 2 ] , function ( i , n ) {
95
+ console . log ( n ) ; // 分别输出:2, 1 ,0
96
+ } ) ;
97
+
98
+ var each1 = function ( ary , callback ) {
99
+ for ( var i = 0 , l = ary . length ; i < l ; i ++ ) {
100
+ if ( callback ( i , ary [ i ] ) === false ) { // callback 的执行结果返回false,提前终止迭代
101
+ break ;
102
+ }
103
+ }
104
+ } ;
105
+
106
+ each1 ( [ 1 , 2 , 3 , 4 , 5 ] , function ( i , n ) {
107
+ if ( n > 3 ) { // n 大于3 的时候终止循环
108
+ return false ;
109
+ }
110
+ console . log ( n ) ; // 分别输出:1, 2, 3
111
+ } ) ;
112
+ </ script >
0 commit comments