[問題] 有關return

看板Ajax作者 (阿蹦)時間8年前 (2015/11/26 11:50), 8年前編輯推噓10(10041)
留言51則, 7人參與, 最新討論串1/1
http://i.imgur.com/QbiYgKU.jpg
想請問上圖點選click時不會work的原因,另外請問function只有在需要回傳值才會用retur -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.168.216 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1448509803.A.192.html

11/26 13:34, , 1F
改成tes.onclick=makeSizer; 試試
11/26 13:34, 1F

11/26 14:19, , 2F
但這樣就沒有傳參數進去了
11/26 14:19, 2F

11/26 14:38, , 3F
closure
11/26 14:38, 3F

11/26 14:56, , 4F
這是從閉包範例改來的,但想知道為什麼這樣不work
11/26 14:56, 4F
※ 編輯: washqwe (180.217.168.216), 11/26/2015 14:56:44

11/26 15:09, , 5F
新手最常犯的錯誤就是 寫個"work"就以為人家知道是什麼
11/26 15:09, 5F

11/26 15:16, , 6F
請問樓上這位老手要怎麼改呢
11/26 15:16, 6F

11/26 16:19, , 7F
我也不懂中文打一打還要切換英文打work不打"動"的原因XD
11/26 16:19, 7F

11/26 16:20, , 8F
還有你原本的問題好像被你自己切掉了?
11/26 16:20, 8F

11/26 16:25, , 9F
沒放任何互動元素用動適當嗎,為何要鑽研在詞而非問題上?
11/26 16:25, 9F

11/26 16:25, , 10F
切掉為不重要的部份
11/26 16:25, 10F

11/26 16:30, , 11F
適當,程式碼就是一個動作,不管看不看得到
11/26 16:30, 11F

11/26 16:30, , 12F
提供幾個方向
11/26 16:30, 12F

11/26 16:31, , 13F
1.程式碼執行時機 你的js執行時元素是否還沒產生?
11/26 16:31, 13F

11/26 16:32, , 14F
2.語法錯誤 就圖片看來,你的第5行少了分號,第6行多了
11/26 16:32, 14F

11/26 16:33, , 15F
3.瀏覽器支援 5px的size在chrome似乎無效,太小了
11/26 16:33, 15F

11/26 16:39, , 16F
然後是比較進階的觀念,tes.onclick=makeSizer(20)
11/26 16:39, 16F

11/26 16:40, , 17F
意思並不是"在tes的onclick事件時執行makeSizer(20)"
11/26 16:40, 17F

11/26 16:41, , 18F
而是"在tes的onclick事件被放了makeSizer(20)的[結果]"
11/26 16:41, 18F

11/26 16:41, , 19F
你簡單在makeSizer函式內多加一行alert('!');,你會發現
11/26 16:41, 19F

11/26 16:42, , 20F
網頁一開始就跳了兩次訊息,但你只希望一開始跑一次
11/26 16:42, 20F

11/26 16:43, , 21F
反而在你按下去時不會顯示訊息,因為你沒有綁到事件
11/26 16:43, 21F

11/26 16:44, , 22F
第六行改這樣 tes.onclick=function(){makeSizer(20);};
11/26 16:44, 22F

11/26 16:44, , 23F
你就會發現有效果了
11/26 16:44, 23F

11/26 16:45, , 24F
如果你希望綁事件時執行特定參數,就得用閉包去包住他
11/26 16:45, 24F

11/26 16:46, , 25F
閉包會產生一個封閉環境,保存了宣告當時包含的數值
11/26 16:46, 25F

11/26 16:47, , 26F
不用閉包,就無法用這種方式宣告事件
11/26 16:47, 26F

11/26 16:48, , 27F
只能考慮寫成元素內的程式碼
11/26 16:48, 27F

11/26 16:49, , 28F
<a href="#" onclick="makeSizer(12);">12</a>
11/26 16:49, 28F

11/26 16:50, , 29F
安內乾五撩蓋?
11/26 16:50, 29F

11/26 16:51, , 30F
為何在makeSizer裡把document.body...移入return就可執行
11/26 16:51, 30F

11/26 16:51, , 31F
11/26 16:51, 31F

11/26 16:55, , 32F
因為那樣會變成回傳一個"動作"呀
11/26 16:55, 32F

11/26 16:56, , 33F
然後onclick就會接收到這個程式回傳結果的"動作"
11/26 16:56, 33F

11/26 16:56, , 34F
可是這樣一來還是閉包喔,在function裡面回傳動作這件事
11/26 16:56, 34F

11/26 16:56, , 35F
就算是閉包了
11/26 16:56, 35F

11/26 16:57, , 36F
等於是你在function裡面回傳另外一個function
11/26 16:57, 36F

11/26 16:58, , 37F
另外5的size好像可行,我以前試不行以為現在也是
11/26 16:58, 37F

11/26 17:02, , 38F
請問這樣12沒動的原因
11/26 17:02, 38F

11/26 17:02, , 39F
是什麼
11/26 17:02, 39F

11/26 17:03, , 40F
大概是因為你包太多層了,所以執行時只是一直給予事件
11/26 17:03, 40F

11/26 17:04, , 41F
而沒有去執行事件,剛才說的方法選一個做就好了
11/26 17:04, 41F

11/26 17:04, , 42F
不要全部都用上去
11/26 17:04, 42F

11/26 17:10, , 43F
我剛才寫的方法,是找一個仲介幫我做事
11/26 17:10, 43F

11/26 17:10, , 44F
而你問的return方法,則是找人要了仲介的地址
11/26 17:10, 44F

11/26 17:11, , 45F
兩個合起來,變成我找一個仲介,幫我要仲介的地址
11/26 17:11, 45F

11/26 17:11, , 46F
結果仲介除了要地址以外沒有做任何事
11/26 17:11, 46F

11/26 17:12, , 47F
而且仲介甚至沒把地址給我
11/26 17:12, 47F

11/26 17:13, , 48F
仲介或仲介的地址,選一個就好了,就可以委託他做事了
11/26 17:13, 48F

11/26 17:15, , 49F
https://goo.gl/crizVA 我覺得MDN講得很清楚了
11/26 17:15, 49F

12/02 09:38, , 50F
style.font-size = 你沒有dash
12/02 09:38, 50F

12/02 10:27, , 51F
這不是css...
12/02 10:27, 51F
文章代碼(AID): #1MLe5h6I (Ajax)
文章代碼(AID): #1MLe5h6I (Ajax)