Dalam tutorial ini, anda akan belajar mengenai fungsi anak panah JavaScript dengan bantuan contoh.
Fungsi panah adalah salah satu ciri yang diperkenalkan dalam versi ES6 JavaScript. Ini membolehkan anda membuat fungsi dengan cara yang lebih bersih berbanding dengan fungsi biasa. Contohnya,
fungsi ini
// function expression let x = function(x, y) ( return x * y; )
boleh ditulis sebagai
// using arrow functions let x = (x, y) => x * y;
menggunakan fungsi anak panah.
Sintaks Fungsi Panah
Sintaks fungsi anak panah adalah:
let myFunction = (arg1, arg2,… argN) => ( statement(s) )
Di sini,
myFunction
adalah nama fungsiarg1, arg2,… argN
adalah argumen fungsistatement(s)
adalah badan fungsi
Sekiranya badan mempunyai pernyataan atau ungkapan tunggal, anda boleh menulis fungsi anak panah sebagai:
let myFunction = (arg1, arg2,… argN) => expression
Contoh 1: Fungsi Anak Panah Tanpa Hujah
Sekiranya fungsi tidak mengambil argumen, maka anda harus menggunakan tanda kurung kosong. Sebagai contoh,
let greet = () => console.log('Hello'); greet(); // Hello
Contoh 2: Fungsi Panah dengan Satu Hujah
Sekiranya fungsi hanya mempunyai satu argumen, anda boleh menghilangkan tanda kurung. Sebagai contoh,
let greet = x => console.log(x); greet('Hello'); // Hello
Contoh 3: Fungsi Anak Panah sebagai Ungkapan
Anda juga boleh membuat fungsi secara dinamik dan menggunakannya sebagai ungkapan. Sebagai contoh,
let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby
Contoh 4: Fungsi Panah Multiline
Sekiranya badan fungsi mempunyai banyak pernyataan, anda perlu memasukkannya ke dalam kurungan keriting ()
. Sebagai contoh,
let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12
ini dengan Fungsi Arrow
Di dalam fungsi biasa, kata kunci ini merujuk kepada fungsi di mana ia dipanggil.
Walau bagaimanapun, this
tidak dikaitkan dengan fungsi anak panah. Fungsi anak panah tidak ada yang tersendiri this
. Oleh itu, setiap kali anda memanggil this
, ia merujuk kepada ruang lingkup induknya. Sebagai contoh,
Di dalam fungsi biasa
function Person() ( this.name = 'Jack', this.age = 25, this.sayName = function () ( // this is accessible console.log(this.age); function innerFunc() ( // this refers to the global object console.log(this.age); console.log(this); ) innerFunc(); ) ) let x = new Person(); x.sayName();
Pengeluaran
25 Tetingkap yang tidak ditentukan ()
Di sini, this.age
bahagian dalam this.sayName()
dapat dicapai kerana this.sayName()
kaedah objek.
Namun, innerFunc()
adalah fungsi normal dan this.age
tidak dapat diakses kerana this
merujuk kepada objek global (Window object di browser) Oleh itu, this.age
di dalam innerFunc()
fungsi memberi undefined
.
Di dalam fungsi anak panah
function Person() ( this.name = 'Jack', this.age = 25, this.sayName = function () ( console.log(this.age); let innerFunc = () => ( console.log(this.age); ) innerFunc(); ) ) const x = new Person(); x.sayName();
Pengeluaran
25 25
Di sini, innerFunc()
fungsi ditakrifkan menggunakan fungsi anak panah. Dan di dalam fungsi anak panah, this
merujuk kepada skop ibu bapa. Oleh itu, this.age
memberi 25 .
Hujah Mengikat
Fungsi biasa mempunyai argumen yang mengikat. Itulah sebabnya apabila anda menyampaikan argumen ke fungsi biasa, anda dapat mengaksesnya menggunakan arguments
kata kunci. Sebagai contoh,
let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)
Fungsi anak panah tidak mempunyai argumen yang mengikat.
Apabila anda cuba mengakses argumen menggunakan fungsi anak panah, ia akan memberikan kesalahan. Sebagai contoh,
let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments
Untuk menyelesaikan masalah ini, anda boleh menggunakan sintaks spread. Sebagai contoh,
let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)
Fungsi Panah dengan Janji dan Panggilan Balik
Fungsi anak panah memberikan sintaks yang lebih baik untuk menulis janji dan panggilan balik. Sebagai contoh,
// ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));
boleh ditulis sebagai
// ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);
Perkara Yang Harus Anda Elakkan Dengan Fungsi Panah
1. Anda tidak boleh menggunakan fungsi anak panah untuk membuat kaedah di dalam objek.
let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined
2. Anda tidak boleh menggunakan fungsi anak panah sebagai konstruktor . Sebagai contoh,
let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor
Catatan : Fungsi panah diperkenalkan pada ES6 . Beberapa penyemak imbas mungkin tidak menyokong penggunaan fungsi anak panah. Lawati sokongan JavaScript Arrow Function untuk mengetahui lebih lanjut.