Rumah >hujung hadapan web >tutorial js >`call()` lwn. `apply()`: Bila Menggunakan Kaedah Invocation Fungsi Yang Mana?

`call()` lwn. `apply()`: Bila Menggunakan Kaedah Invocation Fungsi Yang Mana?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-14 07:16:14964semak imbas

`call()` vs. `apply()`: When to Use Which Function Invocation Method?

Invokasi Fungsi dengan panggilan dan gunakan

Apabila menggunakan fungsi, pengaturcara sering menghadapi pilihan untuk menggunakan Function.prototype.apply() atau Function .prototype.call(). Artikel ini meneroka perbezaan dan kes penggunaan untuk kedua-dua kaedah.

apply() vs. call()

Perbezaan asas terletak pada cara mereka mengendalikan hujah fungsi:

  • apply(): Menerima hujah sebagai tatasusunan.
  • panggilan(): Memerlukan hujah untuk disenaraikan secara eksplisit, dipisahkan oleh koma.

Sintaksis

Method Syntax
apply() function.apply(thisArg, [arg1, arg2, ...])
call() function.call(thisArg, arg1, arg2, ...)

Mnemonik

Untuk mengingati perbezaannya:

  • A untuk tatasusunan: apply() mengambil tatasusunan hujah.
  • C untuk koma: call() memerlukan hujah yang dipisahkan dengan koma.

Kes Penggunaan

  • panggilan(): Berguna apabila melepasi nombor tertentu argumen.
  • apply(): Sesuai untuk senario di mana argumen sudah disimpan dalam tatasusunan atau memerlukan pengikatan dinamik.

Pertimbangan Prestasi

Kedua-dua kaedah mempunyai ciri prestasi yang serupa. Dalam ES6 dan kemudian, operator spread (...) boleh digunakan dengan call(), menyediakan alternatif yang lebih ringkas untuk digunakan().

Contoh

Pertimbangkan fungsi berikut:

function greet(name, occupation) {
  console.log(`Hello, my name is ${name} and I'm a ${occupation}.`);
}

Menyebut fungsi menggunakan apply() dan call():

greet.apply(undefined, ["John", "engineer"]);
greet.call(undefined, "Mary", "doctor");

Ini akan mengeluarkan:

Hello, my name is John and I'm a engineer.
Hello, my name is Mary and I'm a doctor.

Atas ialah kandungan terperinci `call()` lwn. `apply()`: Bila Menggunakan Kaedah Invocation Fungsi Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn