วันนี้ฉันเห็นคำถามทดสอบที่ใช้ฟังก์ชั่นไวยากรณ์ต่อไปนี้:
var a = add (2) (3) (4); // 9
นี่คือแอปพลิเคชันของฟังก์ชั่นลำดับที่สูงกว่า การวิเคราะห์: เพิ่ม (2) จะส่งคืนฟังก์ชั่นเพิ่ม (2) (3) จะส่งคืนฟังก์ชั่นและในที่สุดก็เพิ่ม (2) (3) (4) จะส่งคืนค่าตัวเลข
ทำให้สำเร็จ:
ฟังก์ชั่นเพิ่ม (num1) {return function (num2) {return function (num3) {return num1+num2+num3;}}} เพิ่ม (2) (3) (4); // 9ไม่มีอะไรผิดปกติกับเรื่องนี้มันสามารถแก้ปัญหาได้อย่างสมบูรณ์แบบ
การเพิ่มประสิทธิภาพ: มีเพียงส่วนหนึ่งเกี่ยวกับฟังก์ชั่นการสั่งซื้อที่สูงขึ้นที่นี่ เพื่อการแก้ปัญหาที่ดีกว่าสามารถใช้การโทรที่ไม่มีที่สิ้นสุดได้
// วิธีการ 1 ฟังก์ชั่นเพิ่ม (a) {var temp = function (b) {return add (a + b);} temp.valueof = temp.toString = function () {return a;}; return temp;} เพิ่ม (2) (3) (4) (5); = num; return add;} add.valueof = add.toString = function () {return add.num}; var a = add (3) (4) (5) (6); // 18 // วิธีการ 2 ความคิดเห็น: อันที่จริงมันเทียบเท่ากับ แต่แอตทริบิวต์ที่กำหนดเองถูกนำไปใช้กับฟังก์ชั่นเพื่อจัดเก็บค่า ; (function () {var sum = 0; ฟังก์ชันเพิ่ม (num) {sum+= num; return add;} add.valueof = add.toString = function () {return sum;} window.add = เพิ่ม;}) () var a = add (3) (4) (5) (6); // 18 [/รหัส]นี่คือสิ่งที่ฉันเขียนไว้ในบทความที่ฉันเห็นใน [url = http: //www.cnblogs.com/wengxuesong/p/5577683.html] Blog Garden [/url] ฉันไม่เคยเข้าใจวิธีหนึ่งและวิธีการที่สองและฉันก็พยายามส่งออก [code = javascript, รหัส JavaScript, True] ฟังก์ชัน 9 ในคอนโซล
var temp = function () {} temp.valueof = function () {return 2;} temp.toString = function () {return 'hahh';} การแจ้งเตือน (temp); console.log (2 * temp);เมื่อจำเป็นต้องแปลงเป็นสตริง ToString จะถูกเรียกและ ValueOf จะถูกเรียกเมื่อจำเป็นต้องแปลงเป็นตัวเลข