วงเล็บสองชุดหลังจากการเรียกใช้ฟังก์ชัน


168

ฉันมองว่าตัวกรองทำงานอย่างไรใน Angularjs และฉันเห็นว่าเราต้องส่งวงเล็บ 2 ชุด

$filter('number')(number[, fractionSize])

มันหมายถึงอะไรและเราจะจัดการกับ JavaScript อย่างไร


7
โดยส่วนตัวแล้วฉันพบว่ารูปแบบนี้ทำให้อ่าน / สับสนเกิดความสับสน แต่คุณสามารถใช้ไวยากรณ์ที่ง่ายขึ้นเพื่อเข้าถึงตัวกรอง AngularJS ดังที่อธิบายไว้ที่นี่: stackoverflow.com/a/14303362/1418796
pkozlowski.opensource

ฉันเอา angularjs เป็นตัวอย่าง ฉันอยากรู้วิธีจัดการเรื่องนี้ถ้าฉันสร้างฟังก์ชั่นด้วยตัวเอง
L105

4
จริงๆแล้วมันเรียกว่า "แกงกะหรี่" เทคนิคการเขียนโปรแกรม
Sajuuk

คำตอบ:


331

หมายความว่าฟังก์ชั่นแรก ( $filter) ส่งคืนฟังก์ชั่นอื่นจากนั้นฟังก์ชั่นที่ส่งคืนจะถูกเรียกทันที ตัวอย่างเช่น:

function add(x){
  return function(y){
    return x + y;
  };
}

var addTwo = add(2);

addTwo(4) === 6; // true
add(3)(4) === 7; // true

14
ด้วยฟังก์ชั่นลูกศร ES6 คุณสามารถเขียนได้ด้วยวิธีต่อไปนี้:let add = (x) => (y) => x + y;
guido

2
โทรหาฉัน Noob แต่โปรดสละเวลาของคุณเพื่ออธิบายว่าฟังก์ชั่นย่อยสามารถเก็บค่าได้อย่างไรx
Vikas Bansal

2
@VikasBansal ทุกครั้งที่มีการเรียกใช้ฟังก์ชั่นใน Javascript บริบทการดำเนินการใหม่จะถูกสร้างขึ้นตราบใดที่มีการอ้างอิงไปยังฟังก์ชั่นอื่น ๆ ภายในนั้นบริบทการดำเนินการจะอยู่ในหน่วยความจำ
Paul

11
ทำไมไม่เพียงแค่ผ่าน 2 ข้อโต้แย้งเป็นadd(x, y)อย่างไร ประโยชน์ของการเรียกมันเป็นเช่นไร?
Piotr Pawlik

1
ขอบคุณสำหรับคำอธิบายนี้! ช่วยให้ฉันเข้าใจจริงๆว่าการตรวจสอบหนังสือเดินทางทำงานอย่างไร:passport.authenticate("local")(req, res, function(){
tidydee

22

$filter('number') ส่งกลับฟังก์ชั่นที่ยอมรับสองข้อโต้แย้งครั้งแรกที่จำเป็น (จำนวน) และคนที่สองเป็นตัวเลือก (ขนาดส่วน)

เป็นไปได้ที่จะเรียกใช้ฟังก์ชันที่ส่งคืนทันที:

$filter('number')('123')

หรือคุณอาจใช้ฟังก์ชันที่ส่งคืนเพื่อใช้ในอนาคต:

var numberFilter = $filter('number');

numberFilter('123')

นี้; ดูซับซ้อน: ส่งออก const ToursListQuery = แบบสอบถาม gql` ToursListQuery {ทัวร์ {ชื่อ id}} `; ส่งออกเริ่มต้น graphql (ToursListQuery, {options: {pollInterval: 10000},}) (ToursList);
stackdave

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