Hari ini saya membaca catatan blog yang hebat oleh Mark Needham berjudul

JavaScript: mengelirukan 'Call' dan 'Apply'
. Beberapa saat lagi saya menulis artikel untuk newsletter Tech Times
kami mengenai objek Argumen JavaScript. Ia dipanggil hujah: keanehan JavaScript. Kerana ia mempunyai pelbagai tingkah laku yang menarik yang berguna untuk diketahui. Saya menyedari bahawa walaupun saya menggunakan kedua -dua panggilan dan memohon
Dalam artikel itu saya tidak bercakap tentang perbezaannya.
Baiklah ia sebenarnya agak mudah. Pertama sekali, kedua -dua kaedah mengharapkan ini sebagai hujah pertama. Inilah hujah yang memberikan fungsi konteks; Ia menentukan nilai kata kunci JavaScript ini di dalam fungsi yang dipanggil atau digunakan. Perbezaan tunggal ialah kaedah panggilan memerlukan argumen ditentukan secara berasingan; Kaedah memohon mengambilnya sebagai array. Lebih jelas jika anda melihat sintaks:
function.call(thisArg[, argument1[, argument2[, ...]]]);
Salin selepas log masuk
Oleh itu, jika anda bekerja dengan objek Argumen dalam JavaScript anda, anda boleh memanggil sebarang fungsi dengan menggunakan kaedah yang digunakan dan hanya lulus dalam objek argumen yang ada sebagai argumen array.
Semoga itu berguna untuk anda!
function.apply(thisArg[, argumentArray]);
Salin selepas log masuk
Imej ciri oleh Sudhamshu. Bolehkah anda membuat kepentingan?
Soalan Lazim (Soalan Lazim) Mengenai Panggilan dan Fungsi Fungsi Terap dengan JavaScript
Apakah perbezaan utama antara panggilan dan fungsi fungsi yang dikenakan dalam JavaScript? Dengan kaedah panggilan (), anda lulus argumen secara individu, dipisahkan oleh koma. Sebaliknya, kaedah memohon () memerlukan argumen untuk diluluskan sebagai array. Kedua -dua kaedah ini membolehkan anda mengawal nilai 'ini' dalam fungsi, tetapi cara anda lulus parameter tambahan berbeza. Menggunakan kaedah panggilan (), anda akan melakukan sesuatu seperti ini:
fungsi tambah (a, b) { kembali b; }
console.log (add.call (null, 1, 2)); // output: 3
dan menggunakan kaedah memohon (), ia akan kelihatan seperti ini:
fungsi tambah (a, b) {
kembali b; } console.log (add.apply (null, [1, 2])); // output: 3 Dalam kedua -dua kes, kami memanggil fungsi Tambah dengan 'ini' ditetapkan untuk batal (kerana ia tidak digunakan dalam fungsi ini), dan lulus dalam 1 dan 2 sebagai argumen.
Bilakah saya harus menggunakan fungsi panggilan fungsi yang dikenakan, dan sebaliknya? Jika anda mempunyai senarai argumen dan anda tidak tahu nombor mereka terlebih dahulu, memohon () boleh menjadi lebih mudah kerana ia memerlukan array. Sekiranya anda mengetahui bilangan argumen, atau jika tidak ada argumen sama sekali, hubungi () boleh lebih mudah digunakan. Walau bagaimanapun, anda perlu berhati -hati apabila menggunakan Apply () dengan fungsi pembina yang mengharapkan pelbagai hujah. Oleh kerana memohon () mengambil pelbagai hujah, anda perlu memastikan bahawa array mengandungi bilangan elemen yang betul. Ini membolehkan anda mengawal konteks di mana fungsi dilaksanakan. Sekiranya anda lulus batal atau tidak ditentukan sebagai hujah pertama, fungsi itu akan dilaksanakan dalam konteks global (atau tidak ditentukan dalam mod yang ketat). Sebaliknya, mereka mewarisi 'ini' dari skop sekitarnya. Oleh itu, dengan menggunakan panggilan () atau memohon () untuk menukar nilai 'ini' fungsi anak panah tidak mempunyai kesan. Walau bagaimanapun, jika anda berurusan dengan fungsi yang mengambil sejumlah besar argumen, memohon () boleh sedikit lebih perlahan kerana ia perlu melangkah ke atas pelbagai argumen. Ini berguna apabila anda ingin menggunakan kaedah yang wujud pada satu jenis objek dengan objek jenis yang berbeza. Sekiranya anda melewati terlalu banyak hujah, hujah -hujah yang hilang akan ditetapkan untuk tidak ditentukan.
Atas ialah kandungan terperinci Apa perbezaan antara fungsi.call dan fungsi.apply?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!