ค้นหาเว็บไซต์

javascript - วิธีเขียน setTimeout พร้อมพารามิเตอร์โดยใช้ Coffeescript


โปรดบอกฉันว่าต้องเขียน JavaScript ด้านล่างเป็น CoffeeScript อย่างไร

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

คำตอบ #1

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

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

delay 1000, -> something param

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

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

callback = -> something param
setTimeout callback, 1000

คำตอบ #2

setTimeout ( ->
  something param
), 1000

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

คำตอบ #3

setTimeout -> 
  something param
, 1000

คำตอบ #4

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

setTimeout (-> something param), 1000

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

คำตอบ #5

ฉันพบว่านี่เป็นวิธีที่ดีที่สุดในการทำสิ่งเดียวกัน

setTimeout (-> alert "hi"), 1000

บทความที่เกี่ยวข้อง