Setiap fungsi JavaScript dapat mengakses variabel khusus - argumen dalam ruang lingkupnya. Variabel ini berisi daftar semua parameter yang diteruskan ke fungsi.
Objek argumen bukan array. Meskipun secara sintaksis memiliki tempat yang sama dengan array, misalnya memiliki properti panjang. Tetapi tidak diwarisi dari array.prototype, pada kenyataannya, itu adalah objek.
Oleh karena itu, kami tidak dapat secara langsung menggunakan beberapa metode array untuk argumen, seperti dorongan, pop atau irisan, dll. Jadi untuk menggunakan metode ini, kita perlu mengubahnya menjadi array nyata.
Konversi ke array
Kode berikut akan mengembalikan array yang berisi semua elemen objek argumen.
Array.prototype.slice.call (argumen);
Karena kecepatan konversi sangat lambat, ini tidak direkomendasikan dalam program dengan persyaratan kinerja yang ketat.
Parameter lulus
Berikut adalah metode yang lebih disarankan untuk meneruskan objek argumen dari satu fungsi ke fungsi lainnya.
Salinan kode adalah sebagai berikut:
fungsi foo () {
Bar.Apply (null, argumen);
}
bilah fungsi (a, b, c) {
// lakukan hal -hal di sini
}
Ada metode pintar lain, yaitu untuk dengan cepat membuat metode luar yang tidak mengikat menggunakan panggilan dan berlaku pada saat yang sama.
Salinan kode adalah sebagai berikut:
function foo () {}
Foo.prototype.method = function (a, b, c) {
console.log (ini, a, b, c);
};
// Buat versi "Metode" yang tidak terikat
// Dibutuhkan parameter: ini, arg1, arg2 ... argn
Foo.method = function () {
// Hasil: foo.prototype.method.call (ini, arg1, arg2 ... argn)
Function.call.Apply (foo.prototype.method, argumen);
};
Hubungan antara parameter fungsi dan atribut argumen
Objek Argumen menciptakan metode Getter dan Setter untuk properti dan parameter fungsinya sendiri.
Oleh karena itu, memodifikasi parameter formal fungsi akan mempengaruhi nilai properti dari objek argumen yang sesuai dan sebaliknya.
Salinan kode adalah sebagai berikut:
fungsi foo (a, b, c) {
Argumen [0] = 2;
A; // 2
B = 4;
argumen [1]; // 4
var d = c;
d = 9;
C; // 3
}
foo (1, 2, 3);
Masalah kinerja
Argumen tidak akan dibuat hanya dalam dua kasus, satu dinyatakan sebagai variabel lokal di dalam fungsi, dan yang lainnya digunakan sebagai parameter formal fungsi. Dalam kasus lain, objek argumen akan selalu dibuat.
Karena metode Getter dan Setter selalu dibuat dengan pembuatan objek argumen, menggunakan argumen memiliki sedikit efek pada kinerja itu sendiri.
Namun, ada situasi yang secara serius mempengaruhi kinerja JavaScript, yaitu menggunakan argumen. Callee.
Salinan kode adalah sebagai berikut:
fungsi foo () {
argumen.callee; // Lakukan sesuatu dengan objek fungsi ini
argumen.callee.caller; // dan objek fungsi panggilan
}
fungsi bigloop () {
untuk (var i = 0; i <100000; i ++) {
foo (); // biasanya akan diletakkan ...
}
}
Dalam kode di atas, fungsi FOO tidak lagi merupakan ekstensi inline sederhana, karena perlu mengetahui dirinya dan peneleponnya. Ini tidak hanya mengimbangi peningkatan kinerja yang dibawa oleh ekstensi inline, tetapi juga merusak enkapsulasi fungsi, karena fungsi itu sendiri mungkin perlu bergantung pada latar belakang panggilan tertentu.
Oleh karena itu, disarankan agar Anda mencoba untuk tidak menggunakan argumen. Callee.
Di atas adalah semua tentang objek argumen JavaScript. Apakah Anda tahu itu? Sederhananya
Argumen merujuk ke objek parameter fungsi (mengacu pada parameter yang dilewatkan aktual)
Argumen. Panjang mengacu pada panjang objek parameter fungsi.
Argumen [i] mengacu pada nilai parameter ke-i (yang pertama adalah 0)