definisi argumen
Semua fungsi memiliki argumen sendiri keberatan untuk menyimpan parameter yang sebenarnya diterimanya, tanpa terbatas pada daftar parameter yang ditentukan ketika fungsi dinyatakan. Ini bukan array tetapi mirip dengan array. Ini memiliki properti dan metode akses yang sama sebagai array. Ini dapat mengakses nilai parameter tunggal yang sesuai dengan argumen [n] dan memiliki panjang atribut panjang array. Tetapi ada beberapa metode yang tidak memiliki array. Anda dapat mengubah argumen menjadi array nyata melalui panggilan, dan kemudian melakukan operasi array.
var args = array.prototype.slice.call (argumen);
Array kelas
1. Tentukan apakah argumen adalah array
waspada (argumen contoh array); peringatan (argumen instance dari objek);
2. Bagaimana cara menentukan bahwa data adalah instance dari kelas array (array)
fungsi isArray (value) {if (typeof array.isArray === "function") {return array.isArray (value); } else {return object.prototype.toString.call (value) === "[array objek]"; }}3. Konversi argumen ke array
Metode 1: Jenis bawaan dapat ditemukan melalui prototipe. Array.prototype.slice adalah irisan metode bawaan untuk mengakses array. Mengembalikan array melalui metode slice. Panggilan adalah metode yang memanggil objek dan mengganti objek saat ini dengan objek lain.
var arg = array.prototype.slice.call (argumen, 0);
Metode 2: Kinerja lebih buruk dari Metode 1, karena membuat array terlebih dahulu dan kemudian berlangsung.
var arg = [] .slice.call (argumen, 0);
Metode 3: Konversi ke array melalui loop
fungsi toarray (argumen) {var a = []; untuk (var i = 0; i <arguments.length; i ++) {A.unshift (argumen. [i]); } return a;}Penelepon
Ketika suatu fungsi dipanggil oleh fungsi lain, fungsi yang dipanggil akan secara otomatis menghasilkan atribut penelepon, menunjuk ke objek fungsi yang menyebutnya. Jika fungsinya tidak dipanggil, peneleponnya nol.
function testCaller () {var caller = testCaller.caller; peringatan (penelepon);} function acaller () {testCaller ();} acaller ();Yang muncul adalah konten fungsi ACALLER.
argumen.callee
Arguments.Callee menunjuk ke fungsi berjalan itu sendiri dan mengembalikan objek fungsi yang dieksekusi, yaitu, tubuh objek fungsi yang ditentukan.
Catatan: Argumen. Panjang adalah panjang parameter aktual, argumen. Callee.length adalah panjang parameter formal, yang biasanya digunakan untuk menentukan apakah panjang parameter aktual konsisten.
Dapatkan parameter aktual fungsi melalui argumen, dan dapatkan parameter formal fungsi melalui argumen. Callee.
Ini juga banyak digunakan dalam penutupan.
var i = 0; fungsi b (num) {if (num <10) {num ++; i ++; // Jika ada parameter, Callee juga harus membawa parameter; argumen.callee (num); } else {// output 2 peringatan ("panggilan"+i+"callee!"); }} b (8); Penerapan argumen. Callee in penutupan menyediakan fungsi panggilan rekursif. // Gunakan argumen. x * argumen.callee (x - 1): 1} (10); // output 6 peringatan (c (3)); // output 3628800 peringatan (c (10));Contoh: Callee menemukan jumlah 1-n
fungsi fn (n) {if (n == 1) return n; lain return n+argumen.callee (n-1);}Ini memungkinkan fungsi anonim untuk memanggil dirinya sendiri
contoh:
daftar fungsi (type) {var result = "<"+type+"l> <li>"; var args = array.prototype.slice.call (argumen, 1); hasil += args.join ("</li> <li>"); hasil+= "</li> </"+type+"l>"; Hasil pengembalian;} var lisththtml = daftar ("o", "satu", "dua"); console.log (listhtml);Contoh 2: Pertanyaan Wawancara: Apa hasil konsol berikut.log [1,2,3,4]?
function foo (x) {console.log (argumen); return x;} foo (1,2,3,4); function foo (x) {console.log (argumen); return x;} (1,2,3,4)Selama pra-eksplanasi, fungsi fn () {} (1); akan diproses secara terpisah dan dibagi menjadi dua fungsi, yang pertama adalah fungsi fn () {}, dan yang kedua adalah fungsi anonim: (1). Jika yang kedua tidak memiliki parameter, kesalahan akan dilaporkan, tetapi fungsi di atas termasuk dalam a (), yang benar.
(fungsi fn () {console.log (argumen);} (1,2,3,4)); (function foo (x) {console.log (argumen); return x;}) (1,2,3,4) foo () {bar.Apply (null, argumen);} function bar (x) {console.