Có một số cách khác nhau để gọi một chức năng mà không có dấu ngoặc đơn. Show
Giả sử bạn có chức năng này được xác định:
Sau đó, ở đây bằng một số cách để gọi 1 mà không có dấu ngoặc đơn:1. Là hàm tạoVới 2, bạn có thể gọi một chức năng mà không có dấu ngoặc đơn:
Từ MDN trên bộ lọc 2:
2. Như new constructor[([arguments])] 4 hoặc new constructor[([arguments])] 5 thực hiện 4 và 5 là các phương pháp đặc biệt: chúng được gọi là ngầm khi cần chuyển đổi:
Bạn có thể (AB) sử dụng mẫu này để gọi 1 mà không cần dấu ngoặc đơn:
Hoặc với 5:
5 và 4 trên thực tế được gọi từ phương thức toprimitive (kể từ ES6), và do đó bạn cũng có thể thực hiện phương pháp đó:
2.B ghi đè new constructor[([arguments])] 5 trong nguyên mẫu chức năngBạn có thể lấy ý tưởng trước đó để ghi đè phương thức 5 trên nguyên mẫu 4:
Một khi bạn đã làm điều đó, bạn có thể viết:
Và mặc dù có dấu ngoặc đơn liên quan đến dòng, việc gọi kích hoạt thực tế không có dấu ngoặc đơn. Xem thêm về điều này trong blog "Phương thức gọi trong JavaScript, mà không thực sự gọi chúng" 3. Là máy phát điệnBạn có thể xác định hàm máy phát (với 5), trả về một trình lặp. Bạn có thể gọi nó bằng cú pháp lan truyền hoặc với cú pháp 6.Đầu tiên chúng ta cần một biến thể trình tạo của hàm 1 gốc:
Và sau đó chúng tôi gọi nó mà không có dấu ngoặc đơn bằng cách xác định phương thức @@ iterator: 0Thông thường các trình tạo sẽ có từ khóa 8 ở đâu đó, nhưng không cần thiết để chức năng được gọi.Câu lệnh cuối cùng gọi hàm, nhưng điều đó cũng có thể được thực hiện với sự phá hủy: 1hoặc cấu trúc 9, nhưng nó có dấu ngoặc đơn của riêng mình: 2Lưu ý rằng bạn cũng có thể thực hiện các điều trên với chức năng 1 ban đầu, nhưng nó sẽ kích hoạt một ngoại lệ trong quy trình, sau khi 1 đã được thực thi (thử nghiệm trên FF và Chrome). Bạn có thể quản lý ngoại lệ với khối 2.4. Là getter@Jehna1 có một câu trả lời đầy đủ về điều này, vì vậy hãy cho anh ta tín dụng. Dưới đây là một cách để gọi một dấu ngoặc đơn hàm trên phạm vi toàn cầu, tránh phương pháp 3 không dùng nữa. Nó sử dụng 4 thay thế.Chúng ta cần tạo một biến thể của hàm 1 ban đầu cho điều này: 3Và sau đó: 4Thay thế 6 bằng bất kỳ đối tượng toàn cầu nào của bạn.Bạn có thể gọi hàm 1 ban đầu mà không để lại dấu vết trên đối tượng toàn cầu như sau: 5Nhưng người ta có thể lập luận rằng chúng ta có dấu ngoặc đơn ở đây (mặc dù chúng không liên quan đến việc gọi thực tế). 5. Chức năng thẻVì ES6, bạn có thể gọi một hàm chuyển nó một mẫu theo nghĩa đen với cú pháp này: 6Xem "Tagged Memlate Lingerals". 6. Là người xử lý proxyKể từ ES6, bạn có thể xác định proxy: 7Và sau đó đọc bất kỳ giá trị tài sản nào sẽ được gọi 1: 8Có nhiều biến thể của điều này. Một ví dụ nữa: 97. Như trình kiểm tra ví dụToán tử 9 thực thi phương thức 0 trên toán hạng thứ hai, khi được xác định: 0
Bạn có thể gọi một chức năng mà không có dấu ngoặc đơn?Khi chúng ta gọi một chức năng với dấu ngoặc đơn, chức năng sẽ được thực thi và trả về kết quả cho người được gọi. Trong một trường hợp khác, khi chúng ta gọi một hàm không có dấu ngoặc đơn, một tham chiếu chức năng sẽ được gửi đến gọi có thể gọi thay vì thực hiện chính chức năng.a function reference is sent to the callable rather than executing the function itself.
Sự khác biệt giữa chức năng gọi có và không có dấu ngoặc đơn JavaScript là gì?Trả lời 523FAC85F10C6010FC00054F bằng cách sử dụng () sau khi hàm có nghĩa là thực thi hàm và trả về giá trị của nó. Sử dụng số () có nghĩa là tìm nạp hàm sẽ được truyền dưới dạng gọi lại.Using () after a function means to execute the function and return it's value. Using no () means to fetch the function to be passed along as a callback.
Phương pháp nào không yêu cầu sử dụng dấu ngoặc đơn trong JavaScript?Toán tử mới không yêu cầu dấu ngoặc đơn nếu không có tham số nào được sử dụng.Sửa chữa, cách dễ nhất để làm điều này là tạo ra một toán hạng buộc biểu thức chức năng phải được đánh giá.!! doesn't require parentheses if no parameters are used. Correction, the easiest way to do this is to prepend an operand that forces the function expression to be evaluated. !
Là dấu ngoặc đơn có tùy chọn không?Trong nhiều trường hợp, dấu ngoặc đơn trong biểu thức là tùy chọn.Đôi khi chúng giúp bạn làm rõ ưu tiên của các hoạt động - ví dụ: nếu ((a & b) | c), tuy nhiên, tuy nhiên, chúng hoàn toàn không giúp được gì và chỉ cần thêm vào mã chết - var d = a + (b + c);.. Sometimes they help you clarify precedence of operations — for example if ((a & b) | c) , sometimes, however, they do not help at all and just add up to dead code — var d = a + (b + c); . |