Hai bộ dấu ngoặc sau hàm gọi


168

Tôi đã xem cách các bộ lọc hoạt động trong Angularjs và tôi thấy rằng chúng tôi cần gửi 2 bộ dấu ngoặc đơn.

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

Nó có nghĩa là gì và làm thế nào để chúng tôi xử lý nó với JavaScript?


7
Cá nhân tôi thấy cú pháp này khó hiểu / lúng túng khi đọc là tốt. Nhưng bạn có thể sử dụng cú pháp đơn giản hơn để truy cập các bộ lọc AngularJS như được mô tả ở đây: stackoverflow.com/a/14303362/1418796
pkozlowski.opensource

Tôi lấy angularjs như một ví dụ. Tôi muốn biết làm thế nào để xử lý việc này nếu tôi tự tạo một chức năng.
L105

4
Thật ra nó được gọi là "cà ri". một kỹ thuật lập trình.
Sajuuk

Câu trả lời:


331

Nó có nghĩa là hàm đầu tiên ( $filter) trả về một hàm khác và sau đó hàm trả về đó được gọi ngay lập tức. Ví dụ:

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

var addTwo = add(2);

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

14
Với các chức năng mũi tên ES6, bạn có thể viết nó theo cách sau:let add = (x) => (y) => x + y;
guido

2
Gọi tôi là Noob, nhưng vui lòng dành thời gian của bạn để giải thích làm thế nào chức năng phụ có thể giữ giá trị củax
Vikas Bansal

2
@VikasBansal Mỗi khi một hàm được gọi trong Javascript, một bối cảnh thực thi mới được tạo ra, miễn là có một tham chiếu đến một hàm khác bên trong nó, bối cảnh thực thi sẽ nằm trong bộ nhớ.
Paul

11
Tại sao không vượt qua 2 đối số như thế add(x, y)nào? Đâu là lợi ích của việc gọi nó như vậy?
Piotr Pawlik

1
Cảm ơn lời giải thích này! Thực sự đã giúp tôi hiểu cách hoạt động của xác thực Passportjs:passport.authenticate("local")(req, res, function(){
tidydee

22

$filter('number') trả về một hàm chấp nhận hai đối số, yêu cầu đầu tiên (một số) và đối số thứ hai là tùy chọn (kích thước phân số).

Có thể gọi ngay hàm trả về:

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

Ngoài ra, bạn có thể giữ chức năng trả về để sử dụng trong tương lai:

var numberFilter = $filter('number');

numberFilter('123')

điều này; có vẻ phức tạp: export const tourListQuery = gql` truy vấn ToursListQuery {tour {id name}} `; xuất biểu đồ mặc định (tourListQuery, {tùy chọn: {pollInterval: 10000},}) (ToursList);
stackdave

7

Nó giống như thế này:

var func = $filter('number');
func(number[, fractionSize]);

Các $filter()chức năng trả về một con trỏ đến chức năng khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.