Rumah >masalah biasa >Perbezaan antara fungsi anak panah dan fungsi biasa

Perbezaan antara fungsi anak panah dan fungsi biasa

百草
百草asal
2023-09-13 09:32:212416semak imbas

Perbezaan antara fungsi anak panah dan fungsi biasa adalah terutamanya dalam kesederhanaan sintaks, berbeza mata ini, tidak berkenaan dengan pembina, tiada objek argumen, dsb. Pengenalan terperinci: 1. Sintaks fungsi anak panah adalah lebih ringkas daripada fungsi biasa boleh ditakrifkan secara langsung Fungsi anak panah ialah Apabila hanya terdapat satu parameter, kurungan juga boleh diabaikan.

Perbezaan antara fungsi anak panah dan fungsi biasa

Fungsi Anak Panah dan Fungsi Biasa ialah dua cara untuk mentakrifkan fungsi dalam JavaScript. Ia mempunyai beberapa perbezaan dalam sintaks dan fungsi. Di bawah ini saya akan memperkenalkan secara terperinci perbezaan antara fungsi anak panah dan fungsi biasa.

1. Kesederhanaan sintaks:

Sintaks fungsi anak panah adalah lebih ringkas daripada fungsi biasa. Fungsi anak panah boleh ditakrifkan menggunakan anak panah (=>), mengetepikan kata kunci fungsi dan pendakap kerinting, dan boleh mentakrifkan secara langsung parameter dan mengembalikan nilai fungsi. Contohnya:

   // 普通函数
   function regularFunc(a, b) {
     return a + b;
   }
   
   // 箭头函数
   const arrowFunc = (a, b) => a + b;

Fungsi anak panah juga boleh menghilangkan kurungan apabila ia hanya mempunyai satu parameter. Contohnya:

   // 普通函数
   function regularFunc(a) {
     return a * 2;
   }
   
   // 箭头函数
   const arrowFunc = a => a * 2;

2 Perkara yang ditunjuk ini adalah berbeza:

Dalam fungsi biasa, nilai ini ditentukan apabila fungsi dipanggil dan ia menunjuk ke objek yang memanggil fungsi tersebut. Dalam fungsi anak panah, nilai ini ditentukan apabila fungsi ditakrifkan dan ia menunjukkan kepada konteks di mana fungsi anak panah ditakrifkan. Ini bermakna bahawa fungsi anak panah tidak mempunyai ini sendiri, ia mewarisi skop induk ini. Contohnya:

   // 普通函数
   const obj = {
     name: 'Alice',
     regularFunc: function() {
       console.log(this.name);
     }
   };
   obj.regularFunc(); // 输出:Alice
   
   // 箭头函数
   const obj = {
     name: 'Alice',
     arrowFunc: () => {
       console.log(this.name);
     }
   };
   obj.arrowFunc(); // 输出:undefined

Dalam fungsi anak panah, ini menunjukkan konteks di mana fungsi anak panah ditakrifkan, bukan objek yang memanggil fungsi anak panah.

3. Tidak terpakai kepada pembina:

Fungsi anak panah tidak boleh digunakan sebagai pembina dan objek tidak boleh digunakan melalui kata kunci baharu. Fungsi biasa boleh digunakan sebagai pembina, dan contoh objek boleh dibuat melalui kata kunci baharu. Contohnya:

   // 普通函数
   function RegularConstructor() {
     this.name = 'Alice';
   }
   const regularObj = new RegularConstructor();
   
   // 箭头函数
   const ArrowConstructor = () => {
     this.name = 'Alice';
   };
   const arrowObj = new ArrowConstructor(); // 报错:ArrowConstructor is not a constructor

4 Tiada objek argumen:

Dalam fungsi biasa, anda boleh menggunakan objek argumen untuk mengakses semua parameter masuk, iaitu objek seperti tatasusunan. Fungsi anak panah tidak mempunyai objek argumennya sendiri, ia mewarisi objek argumen dalam skop induk. Contohnya:

   // 普通函数
   function regularFunc() {
     console.log(arguments[0]);
   }
   regularFunc(1, 2, 3); // 输出:1
   
   // 箭头函数
   const arrowFunc = () => {
     console.log(arguments[0]);
   };
   arrowFunc(1, 2, 3); // 报错:arguments is not defined

Ringkasnya, perbezaan tatabahasa antara fungsi anak panah dan fungsi biasa terutamanya ditunjukkan dalam kesederhanaan dan penunjuk ini. Fungsi anak panah mempunyai sintaks yang lebih ringkas, tetapi tidak boleh digunakan sebagai pembina dan tidak mempunyai objek ini dan argumen sendiri. Sintaks fungsi biasa agak kompleks, tetapi ia boleh digunakan sebagai pembina dan mempunyai objek ini dan hujahnya sendiri. Dalam penggunaan sebenar, kita boleh memilih kaedah definisi fungsi yang sesuai mengikut keperluan tertentu.

Atas ialah kandungan terperinci Perbezaan antara fungsi anak panah dan fungsi biasa. 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