Javascript melewatkan fungsi kosong sebagai parameter

Pada Artikel ini kita akan membahas cara membuat fungsi kosong hanya menggunakan satu baris kode dalam JavaScript. Ini adalah cuplikan kode JavaScript satu baris yang menggunakan salah satu fitur ES6 paling populer => Arrow Function

Mari kita definisikan fungsi singkat ini

const noop = () => {};

Ekspresi fungsi panah adalah alternatif ringkas untuk ekspresi fungsi tradisional, dengan beberapa perbedaan semantik dan batasan penggunaan yang disengaja

  • Fungsi panah tidak memiliki pengikatannya sendiri ke async param => expression async (param1, param2, ...paramN) => { statements } 6, async param => expression async (param1, param2, ...paramN) => { statements } 7, atau async param => expression async (param1, param2, ...paramN) => { statements } 8, dan tidak boleh digunakan sebagai metode
  • Fungsi panah tidak dapat digunakan sebagai konstruktor. Memanggil mereka dengan async param => expression async (param1, param2, ...paramN) => { statements } _9 melempar // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 0. Mereka juga tidak memiliki akses ke kata kunci // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 1
  • Fungsi panah tidak dapat menggunakan // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 2 di dalam tubuhnya dan tidak dapat dibuat sebagai fungsi generator

param => expression (param) => expression (param1, paramN) => expression param => { statements } (param1, paramN) => { statements } _

Parameter istirahat, parameter default, dan destrukturisasi dalam params didukung, dan selalu membutuhkan tanda kurung

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _

Fungsi panah dapat berupa // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 3 dengan mengawali ekspresi dengan kata kunci // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 3

async param => expression async (param1, param2, ...paramN) => { statements } _

Mari uraikan fungsi anonim tradisional menjadi fungsi panah paling sederhana langkah demi langkah. Setiap langkah di sepanjang jalan adalah fungsi panah yang valid

Catatan. Ekspresi fungsi tradisional dan fungsi panah memiliki lebih banyak perbedaan daripada sintaksisnya. Kami akan memperkenalkan perbedaan perilaku mereka secara lebih rinci dalam beberapa subbagian berikutnya

// Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100;

Dalam contoh di atas, tanda kurung di sekitar parameter dan tanda kurung di sekitar badan fungsi dapat dihilangkan. Namun, mereka hanya dapat dihilangkan dalam kasus-kasus tertentu

Tanda kurung hanya dapat dihilangkan jika fungsi memiliki satu parameter sederhana. Jika memiliki beberapa parameter, tidak ada parameter, atau default, destrukturisasi, atau parameter lainnya, tanda kurung di sekitar daftar parameter diperlukan

// Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100;

Kurung hanya dapat dihilangkan jika fungsi mengembalikan ekspresi secara langsung. Jika badan memiliki jalur pemrosesan tambahan, kawat gigi diperlukan — demikian juga kata kunci // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 5. Fungsi panah tidak dapat menebak apa atau kapan Anda ingin kembali

// Traditional anonymous function (function (a, b) { const chuck = 42; return a + b + chuck; }); // Arrow function (a, b) => { const chuck = 42; return a + b + chuck; };

Fungsi panah selalu tidak disebutkan namanya. Jika fungsi panah perlu memanggil dirinya sendiri, gunakan ekspresi fungsi bernama sebagai gantinya. Anda juga dapat menetapkan fungsi panah ke variabel sehingga memiliki nama

// Traditional Function function bob(a) { return a + 100; } // Arrow Function const bob2 = (a) => a + 100;

Fungsi panah dapat memiliki badan yang ringkas atau badan blok biasa

Dalam tubuh yang ringkas, hanya satu ekspresi yang ditentukan, yang menjadi nilai kembalian implisit. Dalam badan blok, Anda harus menggunakan pernyataan // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 5 yang eksplisit

const func = (x) => x * x; // concise body syntax, implied "return" const func2 = (x, y) => { return x + y; }; // with block body, explicit "return" needed

Mengembalikan literal objek menggunakan sintaks tubuh ringkas // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 7 tidak berfungsi seperti yang diharapkan

const func = () => { foo: 1 }; // Calling func() returns undefined! const func2 = () => { foo: function () {} }; // SyntaxError: function statement requires a name const func3 = () => { foo() {} }; // SyntaxError: Unexpected token '{'

Ini karena JavaScript hanya melihat fungsi panah memiliki badan yang ringkas jika token yang mengikuti panah bukan kurung kurawal, jadi kode di dalam kurung kurawal ({}) diurai sebagai urutan pernyataan, di mana // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; 8 adalah label, bukan

Untuk memperbaikinya, bungkus literal objek dalam tanda kurung

const func = () => ({ foo: 1 });

Ekspresi fungsi panah hanya boleh digunakan untuk fungsi non-metode karena mereka tidak memiliki async param => expression async (param1, param2, ...paramN) => { statements } 6 sendiri. Mari kita lihat apa yang terjadi ketika kita mencoba menggunakannya sebagai metode

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _0

Contoh lain yang melibatkan // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 0

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _1

Karena badan kelas memiliki konteks async param => expression async (param1, param2, ...paramN) => { statements } _6, panah berfungsi sebagai bidang kelas yang menutup konteks async param => expression async (param1, param2, ...paramN) => { statements } 6 kelas, dan async param => expression async (param1, param2, ...paramN) => { statements } 6 di dalam badan fungsi panah akan menunjuk dengan benar ke instance (atau kelas itu sendiri, untuk bidang statis). Namun, karena ini adalah penutupan, bukan pengikatan fungsi itu sendiri, nilai async param => expression async (param1, param2, ...paramN) => { statements } 6 tidak akan berubah berdasarkan konteks eksekusi

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _2

Properti fungsi panah sering dikatakan sebagai "metode terikat otomatis", karena setara dengan metode normal

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _3

Catatan. Bidang kelas ditentukan pada instans, bukan pada prototipe, jadi setiap pembuatan instans akan membuat referensi fungsi baru dan mengalokasikan penutupan baru, yang berpotensi menyebabkan lebih banyak penggunaan memori daripada metode tidak terikat normal

Untuk alasan serupa, metode // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 5, // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 6, dan // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 7 tidak berguna saat dipanggil pada fungsi panah, karena fungsi panah dibuat async param => expression async (param1, param2, ...paramN) => { statements } 6 berdasarkan cakupan fungsi panah didefinisikan di dalamnya, dan nilai async param => expression async (param1, param2, ...paramN) => { statements } 6 tidak berubah berdasarkan bagaimana fungsinya

Fungsi panah tidak memiliki objek async param => expression async (param1, param2, ...paramN) => { statements } _7 mereka sendiri. Jadi, dalam contoh ini, async param => expression async (param1, param2, ...paramN) => { statements } _7 adalah referensi untuk argumen dari cakupan terlampir

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _4

Catatan. Anda tidak dapat mendeklarasikan variabel bernama async param => expression async (param1, param2, ...paramN) => { statements } _7 di , jadi kode di atas akan menjadi kesalahan sintaksis. Ini membuat efek pelingkupan async param => expression async (param1, param2, ...paramN) => { statements } _7 jauh lebih mudah untuk dipahami

Dalam kebanyakan kasus, menggunakan parameter istirahat adalah alternatif yang baik untuk menggunakan objek async param => expression async (param1, param2, ...paramN) => { statements } 7

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _5

Fungsi panah tidak dapat digunakan sebagai konstruktor dan akan memunculkan kesalahan saat dipanggil dengan async param => expression async (param1, param2, ...paramN) => { statements } 9. Mereka juga tidak memiliki properti // Traditional anonymous function (function (a, b) { const chuck = 42; return a + b + chuck; }); // Arrow function (a, b) => { const chuck = 42; return a + b + chuck; }; _6

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _6

Kata kunci // Traditional anonymous function (function (a) { return a + 100; }); // 1. Remove the word "function" and place arrow between the argument and opening body bracket (a) => { return a + 100; }; // 2. Remove the body braces and word "return" — the return is implied. (a) => a + 100; // 3. Remove the parameter parentheses a => a + 100; _2 tidak dapat digunakan dalam badan fungsi panah (kecuali jika digunakan dalam fungsi generator yang bersarang lebih lanjut dalam fungsi panah). Akibatnya, fungsi panah tidak dapat digunakan sebagai generator

Fungsi panah tidak boleh berisi jeda baris antara parameternya dan panahnya

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _7

Untuk tujuan pemformatan, Anda dapat meletakkan jeda baris setelah tanda panah atau menggunakan tanda kurung/kurung kurung di sekitar badan fungsi, seperti yang ditunjukkan di bawah ini. Anda juga dapat menempatkan jeda baris di antara parameter

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _8

Meskipun panah dalam fungsi panah bukanlah operator, fungsi panah memiliki aturan penguraian khusus yang berinteraksi secara berbeda dengan prioritas operator dibandingkan dengan fungsi biasa

(a, b, ...r) => expression (a = 400, b = 20, c) => expression ([a, b] = [10, 20]) => expression ({ a, b } = { a: 10, b: 20 }) => expression _9

Karena // Traditional anonymous function (function (a, b) { const chuck = 42; return a + b + chuck; }); // Arrow function (a, b) => { const chuck = 42; return a + b + chuck; }; _8 memiliki prioritas lebih rendah daripada kebanyakan operator, tanda kurung diperlukan untuk menghindari // Traditional anonymous function (function (a, b) { const chuck = 42; return a + b + chuck; }); // Arrow function (a, b) => { const chuck = 42; return a + b + chuck; }; 9 diuraikan sebagai daftar argumen dari fungsi panah

async param => expression async (param1, param2, ...paramN) => { statements } _0

async param => expression async (param1, param2, ...paramN) => { statements } _1

Metode // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 5, // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 6, dan // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 7 berfungsi seperti yang diharapkan dengan fungsi tradisional, karena kami menetapkan ruang lingkup untuk setiap metode

async param => expression async (param1, param2, ...paramN) => { statements } _2

Dengan fungsi panah, karena fungsi // Traditional Function function bob(a) { return a + 100; } // Arrow Function const bob2 = (a) => a + 100; _3 kita pada dasarnya dibuat pada cakupan // Traditional Function function bob(a) { return a + 100; } // Arrow Function const bob2 = (a) => a + 100; 4 (global), fungsi ini akan menganggap async param => expression async (param1, param2, ...paramN) => { statements } 6 adalah // Traditional Function function bob(a) { return a + 100; } // Arrow Function const bob2 = (a) => a + 100; 4

async param => expression async (param1, param2, ...paramN) => { statements } _3

Mungkin manfaat terbesar menggunakan fungsi panah adalah dengan metode seperti // Traditional Function function bob(a) { return a + 100; } // Arrow Function const bob2 = (a) => a + 100; 7 dan // Traditional Function function bob(a) { return a + 100; } // Arrow Function const bob2 = (a) => a + 100; 8 yang biasanya memerlukan semacam penutupan, // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 5, // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 6, atau // Traditional anonymous function (function (a, b) { return a + b + 100; }); // Arrow function (a, b) => a + b + 100; const a = 4; const b = 2; // Traditional anonymous function (no parameters) (function () { return a + b + 100; }); // Arrow function (no arguments) () => a + b + 100; 7 untuk memastikan bahwa fungsi dijalankan dalam lingkup yang tepat

Bagaimana cara memberikan nilai kosong dalam JavaScript?

Gunakan kondisi dengan “” dan NULL untuk memeriksa apakah nilainya kosong . Lemparkan pesan setiap kali ua ser tidak mengisi nilai kotak teks.

Bagaimana Anda melewatkan fungsi kosong?

Dengan Python, untuk menulis fungsi kosong, kita menggunakan pernyataan pass . pass adalah pernyataan khusus dalam Python yang tidak melakukan apa-apa. Ini hanya berfungsi sebagai pernyataan tiruan. Kita juga bisa menggunakan pernyataan pass in while kosong.

Bagaimana cara menggunakan fungsi kosong di JavaScript?

Pernyataan kosong adalah titik koma ( ; ) yang menunjukkan bahwa tidak ada pernyataan yang akan dieksekusi, bahkan jika sintaks JavaScript memerlukannya . Perilaku sebaliknya, di mana Anda menginginkan banyak pernyataan, tetapi JavaScript hanya mengizinkan satu pernyataan, dimungkinkan menggunakan pernyataan blok, yang menggabungkan beberapa pernyataan menjadi satu pernyataan tunggal.

Bisakah kita memberikan null sebagai argumen dalam JavaScript?

Nilai null dalam JavaScript digunakan untuk merujuk ketiadaan nilai objek apa pun dan jika ada fungsi atau variabel yang mengembalikan null, maka kita dapat menyimpulkan bahwa objek tersebut tidak dapat dibuat. Jika kita memberikan null sebagai parameter default ke jenis fungsi apa pun, ini akan menggunakan 'null' sebagai nilai yang diteruskan padanya .

Postingan terbaru

LIHAT SEMUA