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/cn.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灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP