ประโยชน์ของการกำหนดฟังก์ชั่นให้กับ var คืออะไร?


คำตอบ:


8

คำตอบสั้น ๆ ที่ฉันเชื่อว่าเป็นเพียงแค่คุณสร้างฟังก์ชันที่ไม่ระบุชื่อที่กำหนดให้กับตัวแปรซึ่งต่างจากการสร้างฟังก์ชันที่มีชื่อด้วย ...

    function sum() {}

วิธีที่ดีในการตรวจสอบความแตกต่างคือการโทร. ToString () กับพวกเขาและดูความแตกต่างหรือคุณสามารถทำ console.log (sum.name) หนึ่งจะให้ชื่อจริงและอื่น ๆ คือฟังก์ชั่นที่ไม่ระบุชื่อ (หนึ่งที่ได้รับมอบหมายให้ var) มีเฉพาะเช่นกันเช่น var sum = function () {} ได้รับการกำหนดในเวลาทำงานและผลรวมฟังก์ชั่น () {} ได้รับการกำหนดในเวลาในการแยก


สิ่งที่ฉันหมายถึงประโยคสุดท้ายคือถ้าคุณพยายามที่จะเรียกผลรวม () ในบรรทัดก่อนหน้าข้างต้นที่มันถูกกำหนดโดย var แล้วก็จะมีข้อผิดพลาด หากมีการกำหนดไว้เหมือนในคำตอบของฉันแล้วจะไม่มีข้อผิดพลาดแม้ว่าการโทรนั้นเหนือฟังก์ชัน
harmonickey

12
ที่อธิบายความแตกต่างแต่ผมไม่คิดว่ามันจะอธิบายถึงประโยชน์
Keith Thompson

ความแตกต่างระหว่างเวลาในการแยกวิเคราะห์และรันไทม์คืออะไร
Wern Ancheta

1
ไม่มีอะไรเกี่ยวข้องกับฟังก์ชั่นที่มีชื่อคุณยังสามารถกำหนดฟังก์ชั่นที่มีชื่อให้กับตัวแปรได้
Juan Mendes

5

ข้อดีอย่างหนึ่งคือคุณไม่สามารถใช้ฟังก์ชันการประกาศในบล็อกได้ พวกเขาสามารถอยู่ที่ระดับบนสุดของไฟล์หรือโดยตรงภายในฟังก์ชั่นอื่น

if (true) {
  function foo() {}
}
try {
  function foo(){}
}
switch (true) {
  default:
    function foo(){}
}

เหล่านี้ทั้งหมดที่ไม่ได้ระบุโดยมาตรฐานและเบราว์เซอร์ทำสิ่งที่แตกต่างกันเห็น/programming/10069204/function-declarations-inside-if-else-statements ดังนั้นหากคุณต้องใช้สไตล์อื่นในบางครั้งเพื่อความมั่นคงคุณอาจต้องการทำเช่นนั้นเสมอ

นอกจากนี้ฉันไม่แน่ใจเกี่ยวกับอันนี้ แต่ถ้าฉันจำอย่างถูกต้องตัวแปลงสัญญาณเก่าบางตัวไม่ฉลาดพอที่จะจัดการกับการประกาศฟังก์ชันและไม่เปลี่ยนชื่อพวกมัน


3

ฉันไม่ได้เป็นผู้เชี่ยวชาญของ Javascript ดังนั้นเอาสิ่งนี้กับเม็ดเกลือ ฉันคิดว่าในบางกรณีผู้คนอาจทำเพื่อสไตล์และสิ่งเดียวกันก็ทำได้โดยการเขียน "function sum () {... }"

อย่างไรก็ตามการกำหนดฟังก์ชั่นให้กับตัวแปรเป็นเทคนิคที่ทรงพลังมากในการเขียนโปรแกรมฟังก์ชั่น หากคุณคุ้นเคยกับ OOP มันค่อนข้างคล้ายกับ polymorphism ลองนึกถึงตัวอย่างคลาสสิกของคลาสฐานสัตว์และคลาสที่ได้จากแมว / สุนัข คุณสามารถเขียนโค้ดที่ใช้งานได้กับสัตว์ แต่เมื่อมันเรียกฟังก์ชั่นฟังก์ชั่นนั้นอาจทำงานแตกต่างกันไปขึ้นอยู่กับประเภทของอินสแตนซ์

ในการเขียนโปรแกรมเชิงฟังก์ชันคุณอาจมีอัลกอริทึมที่ทำงานกับ "ฟังก์ชั่น" แต่ถ้าคุณใช้ตัวแปรเพื่อเรียกใช้ฟังก์ชั่นนั้นคุณมีความยืดหยุ่นในการกำหนดฟังก์ชั่นที่แตกต่างกันในรันไทม์

ตัวอย่างเช่นสมมติว่าคุณเขียนอัลกอริทึมเพื่อนำเสนอจุดข้อมูล 10,000 จุดในหน้าต่างซึ่งมีความยาวเพียง 500 พิกเซล แต่ละพิกเซลจะแทนจุดข้อมูล 20 จุดและเพื่อแสดงจุดเหล่านั้นคุณต้องรวมจุดข้อมูล 20 จุดเหล่านั้นเป็นค่าเดียว

ดังนั้นสมมติว่าคุณกำหนดอัลกอริทึมเพื่อแสดง 10,000 คะแนนและอัลกอริทึมนี้ใช้ตัวแปรฟังก์ชันที่เรียกว่าการรวมดังนี้:

...
displayValue = aggregate( numbersInOnePixel );
...

ตอนนี้ที่รันไทม์ผู้ใช้ของคุณสามารถเลือกวิธีการรวมข้อมูลได้ ตัวแปรฟังก์ชันจริงของคุณสามารถเป็นอย่างใดอย่างหนึ่งต่อไปนี้:

aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}

0

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

หนึ่งในข้อโต้แย้งที่ฉันได้ยินว่าสนับสนุนvar =สไตล์นี้คือมันสอดคล้องกับวิธีที่คุณประกาศตัวแปรปกติ สิ่งนี้ จำกัด จำนวนฟีเจอร์ภาษาที่คุณใช้และทำให้ง่ายขึ้นในการแนะนำโปรแกรมของคุณให้กับผู้ที่เพิ่งเริ่มใช้จาวาสคริปต์

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