Tại sao chúng tôi sử dụng cuộc gọi và áp dụng trong JavaScript?

Phương thức

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
9 gọi hàm được chỉ định với giá trị
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
0 đã cho và
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
1 được cung cấp dưới dạng một mảng [hoặc một đối tượng giống như mảng]

Thử nó

cú pháp

apply[thisArg]
apply[thisArg, argsArray]

Thông số

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
0

Giá trị của

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
0 được cung cấp cho cuộc gọi đến
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
2. Nếu chức năng không ở chế độ nghiêm ngặt,
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
3 và
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
4 sẽ được thay thế bằng đối tượng toàn cục và các giá trị nguyên thủy sẽ được chuyển đổi thành đối tượng

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
5 Tùy chọn

Một đối tượng giống như mảng, chỉ định các đối số mà

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
2 sẽ được gọi hoặc
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
3 hoặc
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
4 nếu hàm không được cung cấp đối số

Giá trị trả về

Kết quả của việc gọi hàm với giá trị và đối số

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
0 đã chỉ định

Sự miêu tả

Ghi chú. Hàm này gần như giống hệt với

function wrapper[...args] {
  return anotherFn[...args];
}
0, ngoại trừ việc
function wrapper[...args] {
  return anotherFn[...args];
}
0 chấp nhận một danh sách đối số, trong khi
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
9 chấp nhận một mảng đối số — ví dụ:
function wrapper[...args] {
  return anotherFn[...args];
}
3 so với.
function wrapper[...args] {
  return anotherFn[...args];
}
4

Thông thường, khi gọi hàm, giá trị

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
0 bên trong hàm chính là đối tượng mà hàm được truy cập trên đó. Với
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
9, bạn có thể gán một giá trị tùy ý là
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
0 khi gọi một hàm hiện có mà không cần gắn hàm đó vào đối tượng dưới dạng thuộc tính trước. Điều này cho phép bạn sử dụng các phương thức của một đối tượng làm các hàm tiện ích chung

Bạn cũng có thể sử dụng bất kỳ loại đối tượng nào giống như mảng làm tham số thứ hai. Trong thực tế, điều này có nghĩa là nó cần phải có thuộc tính

function wrapper[...args] {
  return anotherFn[...args];
}
8 và thuộc tính số nguyên ["chỉ mục"] trong phạm vi
function wrapper[...args] {
  return anotherFn[...args];
}
9. Ví dụ: bạn có thể sử dụng một
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
50 hoặc một đối tượng tùy chỉnh như
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
51. Bạn cũng có thể sử dụng
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
1, ví dụ

function wrapper[] {
  return anotherFn.apply[null, arguments];
}

Với các tham số còn lại và cú pháp trải rộng tham số, điều này có thể được viết lại thành

function wrapper[...args] {
  return anotherFn[...args];
}

Nói chung,

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
53 tương đương với
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
54 với cú pháp trải rộng tham số, ngoại trừ
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
55 được mong đợi là một đối tượng giống như mảng trong trường hợp trước với
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
9 và một đối tượng có thể lặp lại trong trường hợp sau với cú pháp trải rộng

Cảnh báo. Không sử dụng

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
9 để xây dựng chuỗi [ví dụ: để thực hiện kế thừa]. Điều này gọi hàm tạo như một hàm đơn giản, có nghĩa là
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
58 là
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
4 và các lớp sẽ đưa ra lỗi vì chúng không thể được gọi nếu không có
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
40. Sử dụng
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
41 hoặc
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
42 để thay thế

ví dụ

Sử dụng apply[] để nối một mảng với một mảng khác

Bạn có thể sử dụng

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
43 để thêm một phần tử vào một mảng. Bởi vì
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
44 chấp nhận một số lượng đối số khác nhau, bạn cũng có thể đẩy nhiều phần tử cùng một lúc. Nhưng nếu bạn chuyển một mảng cho
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
44, nó sẽ thực sự thêm mảng đó dưới dạng một phần tử, thay vì thêm các phần tử riêng lẻ, kết thúc bằng một mảng bên trong một mảng. Mặt khác,
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
46 thực sự có hành vi mong muốn trong trường hợp này, nhưng nó không nối thêm vào mảng hiện có — nó tạo và trả về một mảng mới

Trong trường hợp này, bạn có thể sử dụng

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
47 để ngầm "trải" một mảng dưới dạng một chuỗi đối số

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
5

Hiệu ứng tương tự có thể đạt được với cú pháp lây lan

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
4

Sử dụng các hàm apply[] và tích hợp sẵn

Việc sử dụng thông minh

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
9 cho phép bạn sử dụng các hàm tích hợp sẵn cho một số tác vụ mà nếu không thì có thể yêu cầu lặp thủ công trên một bộ sưu tập [hoặc sử dụng cú pháp trải rộng]

Ví dụ: chúng ta có thể sử dụng

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
49 và
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
50 để tìm giá trị lớn nhất và nhỏ nhất trong một mảng

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
5

Nhưng hãy cẩn thận. bằng cách sử dụng

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
9 [hoặc cú pháp trải rộng] với danh sách đối số dài tùy ý, bạn có nguy cơ vượt quá giới hạn độ dài đối số của công cụ JavaScript

Hậu quả của việc gọi một hàm có quá nhiều đối số [nghĩa là hơn hàng chục nghìn đối số] là không xác định và khác nhau giữa các công cụ. [Công cụ JavaScriptCore có giới hạn đối số được mã hóa cứng là 65536. ] Hầu hết các động cơ ném một ngoại lệ; . Để minh họa trường hợp sau này. nếu một công cụ như vậy có giới hạn bốn đối số [giới hạn thực tế tất nhiên cao hơn đáng kể], thì có vẻ như các đối số

function wrapper[] {
  return anotherFn.apply[null, arguments];
}
52 đã được chuyển cho
function wrapper[] {
  return anotherFn.apply[null, arguments];
}
47 trong các ví dụ trên, thay vì toàn bộ mảng

Nếu mảng giá trị của bạn có thể tăng lên hàng chục nghìn, hãy sử dụng chiến lược kết hợp. áp dụng chức năng của bạn cho các khối của mảng tại một thời điểm

Tại sao lại sử dụng áp dụng và gọi JavaScript?

Sự khác biệt giữa call[] và apply[] . Phương thức call[] nhận các đối số riêng . Phương thức apply[] nhận các đối số dưới dạng một mảng. Phương thức apply[] rất tiện dụng nếu bạn muốn sử dụng một mảng thay vì một danh sách đối số.

Khi nào thì sử dụng bind[] call[] và apply[] trong JavaScript?

trói buộc. Nó liên kết hàm với giá trị và ngữ cảnh được cung cấp nhưng nó không thực thi hàm. Để thực thi chức năng, bạn cần gọi chức năng. cuộc gọi. Nó thực thi chức năng với bối cảnh và tham số được cung cấp. áp dụng. Nó thực thi chức năng với bối cảnh và tham số được cung cấp dưới dạng mảng

Việc sử dụng phương thức áp dụng trong JavaScript là gì?

apply[] Phương thức apply[] gọi hàm đã chỉ định với giá trị this đã cho và các đối số được cung cấp dưới dạng một mảng [hoặc một đối tượng giống như mảng].

Đặc điểm chung của call[] apply[] và bind[] là gì?

Các phương thức gọi, liên kết và áp dụng có thể được sử dụng để đặt từ khóa this độc lập với cách gọi hàm . Phương thức bind tạo một bản sao của hàm và thiết lập từ khóa this, trong khi phương thức call và apply thiết lập từ khóa this và gọi hàm ngay lập tức.

Chủ Đề