Web_Design 板


LINE

引述《lueichun (no anonymous)》之銘言: : 我在stackoverflow上看到一個範例: : http://bit.ly/2nTLOgD : 裡面有這麼一段code: : : function generate_handler( j ) { : return function(event) { : switchBanners(j, true); : }; : } : for(var i = 1; i <= totalBanners; i++){ : $('#slider-' + i).click( generate_handler( i ) ); : } $('xxx').click(這邊要放一個function的參照); 當 xxx 被點擊時才會執行 function,所以一般你最常看到的型式應該是這樣: $('xxx').click(function (event) { // do something }); 現場宣告一個匿名 function 其實就是現場宣告一個 function 的參照進去。 上面那個範例可以改寫成這樣: function f(event) { // do something } $('xxx').click(f); 注意是 f 不是 f(), f 是對 f 這個名稱的 function 的參照, f() 是執行 f 這個 function。 .click(f) 是把 f 這個 function 的參照作為參數傳給 .click, 所以原本的 $('xxx') 被點擊時會執行 f 這個 function。 那你原先舉的範例的 return function 在做什麼? 其實他運作起來會像這樣: (下面是複製你提供的範例程式碼,方便解說不用跳來跳去而已) for(var i = 1; i <= totalBanners; i++){ $('#slider-' + i).click( generate_handler( i ) ); } 還記得只要function名後面有括號,就會直接先呼叫那個function嗎? 執行到 .click( generate_handler(i) ) 的時候, 跟數學一樣,括號優先由內解到外, generate_handler(i) 會先被執行, 至於呼叫 generate_handler(i) 會獲得什麼? function generate_handler( j ) { return function(event) { switchBanners(j, true); }; } 這邊運用閉包的概念產生一個全新的匿名 function 參照, 換句話說呼叫 generate_handler(1) 會回傳一個 function (event) { switchBanners(1, true); } 所以如果迴圈內當下 i === 2,那最後中間那個 .click 那行實際做的事情會變成: $('#slider-' + 2).click( function (event) { switchBanners(2, true); }); 這樣可以理解嗎? -- ● 89 m 9/14 david21911 ◇ 你真是AV神人! 鴻雁往返 (R)回信 (x)站內轉寄 (y)回群組信 (d/D)刪信 (^P)寄發新信 (←/q)離開 稱號:AV神人 耐力+30, 魔法+30, 意志+30, 野生動物訓練成功機率+50% 生命-40, 智力-40, 防禦-10, 保護-25, 女性NPC好感度變化 [請問] 獲得這種稱號該如何處理... http://www.plurk.com/Arsho_Enn --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.73.112
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Web_Design/M.1490452690.A.8BD.html ※ 編輯: Hevak (1.168.73.112), 03/25/2017 22:39:39
1F:推 kir7741: 借串問一下('#slider-' +i)是什麼意思,程式新手沒看過這 03/26 09:56
2F:→ kir7741: 種寫法,謝謝 03/26 09:56
3F:推 lueichun: 了解了 感謝 03/26 11:23
4F:→ Hevak: '#slider-' + i 是字串串接,以上面 for 迴圈當下是 i 為 2 03/26 12:09
5F:→ Hevak: 的狀況下,'#slider-' + 2 的 數字2 會被自動轉型成 字串2 03/26 12:09
6F:→ Hevak: ,再跟 '#slider' 接起來,變成字串 '#slider-2' 03/26 12:09
7F:→ Hevak: 至於 $('#slider-2') 就是把 '#slider-2' 作為參數傳給 $ 03/26 12:10
8F:→ Hevak: 這個 function,假設這個 $ 是 jQuery,效果就是回傳選取 03/26 12:10
9F:→ Hevak: 了 id 為 #slider-2 的 DOM 元素的 jQuery 物件 03/26 12:10
10F:→ Hevak: 所以 $('#slider-2').click(中略) 是對 id 為 slider-2 的 03/26 12:11
11F:→ Hevak: 元素綁定 click 事件的處理 function 03/26 12:11
12F:→ Hevak: 應該說,如果 + 的兩邊都是字串,就會把兩個字串串接起來。 03/26 12:26
13F:→ Hevak: 如果只有其中一邊是字串, 03/26 12:26
14F:→ Hevak: 會自動把另一邊轉成字串(toString)再把兩個字串串接起來。 03/26 12:26
15F:推 kir7741: 再給推,謝謝原po仔細解說 03/26 13:00
16F:推 EPGo: 推 03/26 19:33







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP