<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title></title><scriptsrc="Js/jquery-1.5.1.js"type="text/javascript"></script><scripttype="text/javascript"> $(function() {vararr = [3, 5, 9];//-----------$.map(array,fn):用來將一個數組,轉成另一個數組。vararr2 = $.map(arr,function(item) {returnitem * 2; });vararr3 = MyMap(arr,function(item) {returnitem * 2; });//聯想C#委託的例子。函數式編程。for(vari = 0; i < arr8.length; i++) { alert(arr2[i]);//6 10 18 alert(arr3[i]);//6 10 18 alert(arr8[i]); }functionMyMap(arr, func) {//func這個函數就叫回調函數 回調函數:自己定義,系統調用。varnewArr =newArray(arr.length);for(vari = 0; i < arr.length; i++) { newArr[i] = func(arr[i]); }returnnewArr; }//-----------$.each(array,fn)對數組arry每個元素調用fn函數進行處理,沒有返回值。vararr4 = MyEach2(arr,function(index) { alert(index) });//結果為 0 1 2 如果只傳遞一個參數 則列印結果為下標vararr5 = $.each(arr,function(index, item) { alert(index +":"+ item) });//結果為 0:3 1:5 2:9//推測實現如下vararr6 = MyEach(arr,function(index, item) { alert(index +":"+ item) });//實現與arr8結果相同functionMyEach(arr, func) {for(vari = 0; i < arr.length; i++) { func(i, arr[i]);//Each中的回調函數可以傳遞兩個參數 前者是下標 後者是值 } }varjson = {"id":"1","name":"wang"};vararrjson = [{"id":"1","name":"wang"}, {"id":"2","name":"hao"} ];//------------$.map不能處理json格式對象的數組。vararr7 = $.map(arrjson,function(item) {returnitem.id });//map訪問json數組確實實現了值的改變 但是訪問json對象呢vararr8 = $.map(json,function(item) { alert(item);returnitem });//最終什麼都沒有alert 因為json沒有length屬性 而map方法內部遍歷的時候用的就是for//而each能訪問json對象 得到key value 說明each內部方法使用的是for in 進行的遍歷 修改MyEach方法為MyEach2functionMyEach2(arr, func) {for(varkeyinarr) { func(key, arr[key]); func.call(arr[key], key, arr[key]);//第一個參數指定匿名函數的作用域 可以修改為window等 Jquery中默認的each就是這麼實現的 } }vararr9 = MyEach2(json,function(index, item) { alert(index +":"+ item) });//----------在回調函數中的this會是誰???//var arr10 = MyEach2(arr, function (index) { alert(index + "this:" + this) }); //this顯示為domWindow//var arr11 = $.each(arr, function (index) { alert(index + "this:" + this) }); //而使用$.each時 this為結果為item的值 3 5 9???為什麼呢?//改變函數作用域?!納尼 即 系統$.each中真正實現函數時 使用了call 方法來改變函數的作用域func.call(arr[key], key, arr[key]);//var arr12 = $.each(arr, function (item) { alert(item); }); //Each沒有返回值 如果只有一個參數 那就是下標 0 1 2 });//總體說來jquery中的map方法適用於數組 each方法適用於dictionary</script></head><body></body></html>

代碼直接拷貝到html文件中,並確定jquery-1.5.1.js文件外聯存在即可看到運行效果


推薦閱讀:
查看原文 >>
相关文章