วิธีเขียน setTimeout ด้วย params โดย Coffeescript


208

กรุณาบอกวิธีการเขียนจาวาสคริปต์ด้านล่างใน coffeescript

setTimeout(function(){
    something(param);
}, 1000);

เราจะเพิ่ม. call ('hello') ลงในส่วนนี้ได้อย่างไร
Atul

คำตอบ:


214

ฉันคิดว่ามันเป็นวิธีที่มีประโยชน์สำหรับการเรียกกลับมาเป็นอาร์กิวเมนต์สุดท้ายของฟังก์ชั่น โดยปกติจะเป็นกรณีที่มี Node.js API เป็นต้น ดังนั้นในใจ:

delay = (ms, func) -> setTimeout func, ms

delay 1000, -> something param

จริงอยู่นี่จะเป็นการเพิ่มการเรียกใช้ฟังก์ชันพิเศษให้กับทุกsetTimeoutสิ่งที่คุณทำ แต่ในล่าม JS วันนี้ข้อเสียเปรียบด้านประสิทธิภาพนั้นไม่มีนัยสำคัญเว้นแต่คุณจะทำหลายพันครั้งต่อวินาที (และคุณกำลังตั้งค่าการหมดเวลานับพันต่อวินาทีหรือยัง)

แน่นอนวิธีการที่ตรงไปตรงมามากขึ้นก็คือการตั้งชื่อการโทรกลับของคุณซึ่งมีแนวโน้มที่จะสร้างโค้ดที่อ่านได้มากขึ้น (jashkenas เป็นแฟนตัวยงของสำนวนนี้):

callback = -> something param
setTimeout callback, 1000

ดีมากหากคุณไม่ต้องการการโทรกลับซ้อนกัน
Steven Pribilinskiy

184
setTimeout ( ->
  something param
), 1000

วงเล็บเป็นทางเลือก แต่การเริ่มต้นบรรทัดด้วยเครื่องหมายจุลภาคดูเหมือนจะยุ่งกับฉัน


นำออกไปอบและจิบกาแฟ ~)
บิลลี่มูน

4
ไม่คอมไพล์ด้วยวงเล็บสำหรับฉัน ฉันต้องลบพวกเขาเริ่มต้นบรรทัดด้วยเครื่องหมายจุลภาคและใช้งานได้อย่างมีเสน่ห์
Jeremy Thille

ด้วยวงเล็บคุณยังสามารถทำได้ในหนึ่งบรรทัด

1
@ JeremyThille ทราบว่าช่องว่างระหว่างsetTimeoutและ paren เปิดเป็นสิ่งสำคัญ ช่องว่างนั้นหมายถึงวงเล็บที่ล้อมรอบการปิดเป็นพารามิเตอร์แรกเพื่อ setTimeout; หากเป็นหลัง t โดยตรง coffescript จะคาดหวังว่าวงเล็บจะล้อมรอบพารามิเตอร์ทั้งสอง
jankins

67
setTimeout -> 
  something param
, 1000

นี่เป็นวิธีที่ดีที่สุดหากคุณต้องการใช้ฟังก์ชั่นที่ไม่ระบุชื่อ
Alex K

สำหรับฟังก์ชั่นที่มีชื่อ setTimeout namedFunc, 5000
Dirk Smaverson

โปรดทราบว่าช่องว่างมีความสำคัญ การโทรต้องมีระยะห่างตามที่ระบุไว้ด้านบน หากsomething paramอยู่ในบรรทัดเดียวกันกับsetTimeoutมันจะได้รับการแยกวิเคราะห์แตกต่างกัน
henrebotha

46

สิ่งนี้จะส่งผลให้มีการแปลที่เทียบเท่ากัน (ขอบคุณ @Joel Mueller):

setTimeout (-> something param), 1000

โปรดทราบว่านี่ไม่ใช่การแปลที่แน่นอนเนื่องจากฟังก์ชันที่ไม่ระบุชื่อจะส่งคืนผลลัพธ์ของการโทรsomething(param)แทนที่จะไม่ได้กำหนดเช่นเดียวกับในตัวอย่างของคุณ


1
มีหลาย parens / semicolons มากเกินไป! นี่คือ CoffeeScript การกำจัด parens ส่วนเกินคือครึ่งหนึ่ง setTimeout (() -> something param), 1000
Joel Mueller

นิโคลัสทำให้เป็นจุดที่ดีที่ parens ว่างเปล่าก็เป็นตัวเลือกเช่นกัน
Joel Mueller


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.