Fungsi adalah konsep yang paling umum digunakan dalam JavaScript. Fungsi dalam JavaScript adalah fungsi termudah untuk memulai, tetapi juga konsep yang paling sulit untuk dipahami dan dikuasai dalam JavaScript.
1. Jenis fungsi adalah salah satu jenis referensi di JS. Setiap fungsi sebenarnya adalah objek instance dari tipe fungsi, dengan sifat dan metode sendiri. Karena objek fungsional, nama fungsi sebenarnya adalah pointer ke objek fungsi.
2. Metode definisi fungsi yang umum digunakan
1. Deklarasi Fungsi:
jumlah fungsi (a, b) {return a+b;}2. Ekspresi:
var sum = function () {return a+b; }; // Perhatikan titik koma // Perbedaan antara kedua metode: // Penerjemah akan menjadi yang pertama membaca deklarasi fungsi dan membuatnya dapat diakses sebelum dieksekusi. Saat menggunakan ekspresi, Anda harus menunggu sampai parser dieksekusi ke baris kode di mana ia berada sebelum akan ditafsirkan dan dieksekusi (deklarasi variabel maju, sedangkan nilainya dibiarkan di tempat) waspada (jumlah (10, 10)); Jumlah fungsi (a, b) {return a+b;} // ↑ Kode di atas akan dieksekusi secara normal, karena sebelum kode dieksekusi, parser akan dipromosikan melalui deklarasi fungsi, membaca dan menambahkan deklarasi fungsi ke lingkungan eksekusi, dan meletakkannya di bagian atas Code Tree Peringatan (jenis jumlah); peringatan (jumlah (10, 10)); var sum = fungsi (a, b) {return a+b;} // ↑ alasannya adalah bahwa fungsi tersebut terletak dalam pernyataan inisialisasi, bukan deklarasi fungsi, dan tidak akan maju, tetapi hanya akan memajukan jumlah var, dan menggunakan jenis operator untuk menunjukkan bahwa jumlah tidak terdefinisi, sehingga kesalahan dilaporkan3. Nama fungsi hanya memegang pointer ke objek fungsi, sehingga nama fungsi tidak berbeda dari variabel lain yang berisi pointer objek, yaitu objek fungsi dapat memiliki beberapa nama:
jumlah fungsi (a, b) {return a+b;} console.log (sum (2, 3)); // 5var anothersum = sum; // variabel anothersum juga menunjuk ke fungsi objek fungsi yang sama. Log (anothersum (4, 5)); // 9sum = null; // SUM variabel tidak lagi menyimpan pointer ke fungsi objek function.log (anothersum (1, 3)); // variabel anothersum masih bisa dipanggil4. Mengapa JS tidak membebani konsep.
fungsi add (a) {return a+3;} function add (a) {return a+5;} var result = add (3); // 8 // Kedua fungsi memiliki nama yang sama, dan hasilnya hanya bisa menjadi fungsi yang terakhir menimpa yang sebelumnya, sehingga tidak dapat dimuat ulang5. Sifat internal suatu fungsi: di dalam fungsi, ada dua objek khusus, argumen dan ini
1. Argumen:
Argumen adalah objek array kelas, yang berisi semua parameter dari fungsi yang masuk. Objek ini memiliki atribut yang disebut Callee. Nilai properti adalah pointer, menunjuk ke fungsi itu sendiri yang memiliki objek argumen.
fungsi foo () {var a = arguments.callee; kembalikan a.toString ();} foo ();/*Kembalikan hasilnya: "function sum () {var a = arguments.callee; return a.tostring ();}" Artinya, di dalam fungsi, argumen. Callee mengacu pada fungsi itu sendiri. Fungsi ini agak berguna ketika disebut rekursif, memiliki banyak kekurangan, dan dihapus dalam mode ES5 yang ketat*/2. Ini: Sederhananya, ini mengacu pada objek lingkungan di mana fungsi dieksekusi. Ini mengacu pada objek di mana objek dieksekusi. Cukup rumit untuk berkembang, hanya satu artikel
// todo:
3. ES5 Menentukan properti lain dari suatu fungsi: penelepon. Properti fungsi ini mengacu pada fungsi yang memanggil fungsi saat ini.
function inner () {console.log (inner.caller);} function outer () {inner ();} outer (); // fungsi luar () {inner ();}4. Atribut Panjang: Menunjukkan jumlah parameter yang ingin diterima fungsi
fungsi add (a, b, c) {return a+b+c;} add.length; // 35. Atribut prototipe yang terkenal, sedangkan, adalah objek, objek yang dibuat dengan memanggil konstruktor, berisi properti dan metode yang dapat dibagikan oleh semua contoh jenis tertentu. Cukup rumit untuk berkembang, hanya satu artikel
// todo:
6. Dua metode fungsi: call () dan apply (). Mereka berdua menyebut fungsi dalam ruang lingkup tertentu, dan pada kenyataannya mereka menetapkan nilai ini di dalam fungsi.
1. Call (): Mirip dengan metode Apply (), perbedaannya adalah bahwa metode penerima parameter berbeda, dan parameter harus terdaftar satu per satu.
2. Terapkan (): Menerima dua parameter, satu adalah ruang lingkup operasi fungsi, dan yang lainnya adalah array parameter, yang dapat berupa array atau objek array dari kelas argumen.
function sum (a, b) {return a+b;} function callsum (a, b) {return sum.apply (ini, argumen);} // parameter kedua adalah array argumentsfunction callum1 (a, b) {return sum.Apply (this, [a, b]); eB parameter (a, a, b]); // 5 console.log (callum1 (3, 5)); // 83. Parameter yang lewat dan fungsi panggilan bukanlah tempat di mana panggilan () dan terapkan () digunakan. Hal yang sangat kuat tentang operasi fungsi ekspansi adalah ruang lingkup
var color = 'red'; var obj = {color: 'blue'} foo foo () {console.log (this.color); } foo (); //'red'foo.call(this);//'red'foo.call(obj); // 'biru' // Lingkungan eksekusi dari panggilan terakhir ke fungsi foo () telah berubah, dan ini menunjuk ke objek OBJ, jadi itu 'biru'Keuntungan terbesar menggunakan call () dan apply () untuk memperluas ruang lingkup adalah memisahkan objek dan metode
4. ES5 mendefinisikan metode baru: bind (), yang mengembalikan fungsi, di mana nilai ini akan terikat pada nilai yang diturunkan ke fungsi Bind ().
var x = 9; var module = {x: 81, getx: function () {return this.x; }}; module.getX (); // 81var retrievex = module.getx; retrievex (); // 9, karena dalam hal ini, "ini" menunjuk ke variabel global var boundgetx = retrievex.bind (modul); // mengikat ini di fungsi retrievex () ke modul selamanya, dan kemudian memanggil fungsi ini untuk selalu menjalankan boundgetx () di objek modul; // 81Di atas adalah analisis mendalam dari jenis fungsi dalam JavaScript yang diperkenalkan oleh editor. Saya harap ini akan membantu Anda. Jika Anda ingin tahu lebih banyak, harap perhatikan wulin.com.