จากตัวอย่าง Javascript ที่ฉันพบ
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
มีประโยชน์อะไรในการกำหนดฟังก์ชั่นให้กับ var?
จากตัวอย่าง Javascript ที่ฉันพบ
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
มีประโยชน์อะไรในการกำหนดฟังก์ชั่นให้กับ var?
คำตอบ:
คำตอบสั้น ๆ ที่ฉันเชื่อว่าเป็นเพียงแค่คุณสร้างฟังก์ชันที่ไม่ระบุชื่อที่กำหนดให้กับตัวแปรซึ่งต่างจากการสร้างฟังก์ชันที่มีชื่อด้วย ...
function sum() {}
วิธีที่ดีในการตรวจสอบความแตกต่างคือการโทร. ToString () กับพวกเขาและดูความแตกต่างหรือคุณสามารถทำ console.log (sum.name) หนึ่งจะให้ชื่อจริงและอื่น ๆ คือฟังก์ชั่นที่ไม่ระบุชื่อ (หนึ่งที่ได้รับมอบหมายให้ var) มีเฉพาะเช่นกันเช่น var sum = function () {} ได้รับการกำหนดในเวลาทำงานและผลรวมฟังก์ชั่น () {} ได้รับการกำหนดในเวลาในการแยก
ข้อดีอย่างหนึ่งคือคุณไม่สามารถใช้ฟังก์ชันการประกาศในบล็อกได้ พวกเขาสามารถอยู่ที่ระดับบนสุดของไฟล์หรือโดยตรงภายในฟังก์ชั่นอื่น
if (true) {
function foo() {}
}
try {
function foo(){}
}
switch (true) {
default:
function foo(){}
}
เหล่านี้ทั้งหมดที่ไม่ได้ระบุโดยมาตรฐานและเบราว์เซอร์ทำสิ่งที่แตกต่างกันเห็น/programming/10069204/function-declarations-inside-if-else-statements ดังนั้นหากคุณต้องใช้สไตล์อื่นในบางครั้งเพื่อความมั่นคงคุณอาจต้องการทำเช่นนั้นเสมอ
นอกจากนี้ฉันไม่แน่ใจเกี่ยวกับอันนี้ แต่ถ้าฉันจำอย่างถูกต้องตัวแปลงสัญญาณเก่าบางตัวไม่ฉลาดพอที่จะจัดการกับการประกาศฟังก์ชันและไม่เปลี่ยนชื่อพวกมัน
ฉันไม่ได้เป็นผู้เชี่ยวชาญของ 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() {...}
ส่วนใหญ่เป็นเรื่องของสไตล์เนื่องจากมีเพียงสถานการณ์ที่มีความแตกต่างปรากฏขึ้น (เรียกบางฟังก์ชั่นก่อนที่จะสิ้นสุดการประกาศทั้งหมดการใช้เมธอด toString) เป็นกรณีมุม
หนึ่งในข้อโต้แย้งที่ฉันได้ยินว่าสนับสนุนvar =
สไตล์นี้คือมันสอดคล้องกับวิธีที่คุณประกาศตัวแปรปกติ สิ่งนี้ จำกัด จำนวนฟีเจอร์ภาษาที่คุณใช้และทำให้ง่ายขึ้นในการแนะนำโปรแกรมของคุณให้กับผู้ที่เพิ่งเริ่มใช้จาวาสคริปต์