Fungsi

Sep 05, 2024 pm 07:00 PM

Fungsi

Pengenalan kepada Fns:

Blok binaan asas bahasa.
Konsep yang paling penting.
Fn - sekeping kod yang boleh digunakan berulang kali.
{Invoking, Running, Calling} a Fn semuanya bermakna sama.
Fn - boleh mengambil data sebagai hujah, mengembalikan data sebagai hasil selepas pengiraan.
Panggilan Fn digantikan dengan hasil yang dikembalikan daripadanya selepas pelaksanaan.
Fns sesuai untuk melaksanakan prinsip KERING
Hujah diluluskan, parameter ialah pemegang tempat yang menerima nilai yang dihantar ke fn.

Perisytiharan Fn vs ungkapan:

Pengisytiharan Fn bermula dengan kata kunci fn.
Ungkapan Fn ialah fn tanpa nama, disimpan di dalam pembolehubah. Kemudian pembolehubah yang menyimpan fn bertindak sebagai fn.
Fn defn tanpa nama ialah ungkapan, dan ungkapan itu menghasilkan nilai. Fn hanyalah nilai.
Fn bukan jenis Rentetan, Nombor. Nilainya, oleh itu boleh disimpan dalam pembolehubah.
Pengisytiharan Fn boleh dipanggil walaupun sebelum ia ditakrifkan dalam kod iaitu ia dinaikkan. Ini tidak berfungsi dengan ungkapan Fn.
Ungkapan Fn memaksa pengguna untuk mentakrifkan fns dahulu, kemudian menggunakannya kemudian. Semuanya disimpan di dalam pembolehubah.
Kedua-duanya mempunyai tempat di JS, oleh itu perlu dikuasai dengan betul.
Ungkapan Fn = pada asasnya nilai fn yang disimpan dalam pembolehubah

Anak panah Fn disertakan dengan ES6

Pemulangan tersirat untuk satu pelapik, untuk berbilang baris pemulangan eksplisit diperlukan.
Anak panah fns tidak mendapat kata kunci 'ini' sendiri
Pembelajaran bukan proses linear, pengetahuan dibina secara berperingkat secara beransur-ansur. Anda tidak boleh mempelajari segala-galanya tentang sesuatu perkara sekaligus.

## Default parameters
const bookings = [];

const createBooking = function(flightNum, numPassengers=1, price= 100 * numPassengers){
  // It will work for parameters defined before in the list like numPassengers is defined before its used in expression of next argument else it won't work.
  // Arguments cannot be skipped also with this method. If you want to skip an argument, then manually pass undefined value for it which is equivalent to skipping an argument
  /* Setting default values pre-ES6 days.
  numPassengers = numPassengers || 1;
  price = price || 199;*/

// Using enhanced object literal, where if same property name & value is there, just write them once as shown below.
  const booking = {
    flightNum,
    numPassengers,
    price,
  };

  console.log(booking);
  bookings.push(booking);
}

createBooking('AI123');
/*
{
  flightNum: 'AI123',
  numPassengers: 1,
  price: 100
}
*/ 

createBooking('IN523',7);
/*
{
  flightNum: 'IN523',
  numPassengers: 7,
  price: 700
}
*/ 

createBooking('SJ523',5);
/*
{
  flightNum: 'SJ523',
  numPassengers: 5,
  price: 500
} 
*/ 

createBooking('AA523',undefined, 100000);
/*
{
  flightNum: 'AA523',
  numPassengers: 1,
  price: 100000
}
*/ 
Salin selepas log masuk

Memanggil satu fn dari dalam fn lain:

Teknik yang sangat biasa untuk menyokong prinsip KERING.
Menyokong kebolehselenggaraan
kembali serta-merta keluar dari fn
return = untuk mengeluarkan nilai daripada fn, tamatkan pelaksanaan
Tiga cara menulis fn, tetapi semuanya berfungsi dengan cara yang sama iaitu Input, Pengiraan, Output
Parameter = ruang letak untuk menerima nilai i/p, Seperti pembolehubah tempatan fn.

Cara hujah lulus berfungsi iaitu Nilai vs Jenis Rujukan

Primitif dihantar mengikut nilai kepada fn. Nilai asal kekal utuh.
Objek diluluskan dengan merujuk kepada fn. Nilai asal ditukar.
JS tidak mempunyai nilai lulus melalui rujukan.

Interaksi fns berbeza dengan objek yang sama boleh menimbulkan masalah kadangkala

Fns adalah kelas pertama dalam JS, oleh itu kita boleh menulis HO fns.

Fns dianggap sebagai nilai, hanya satu lagi 'jenis' objek.
Oleh kerana objek adalah nilai, fns adalah nilai juga. Oleh itu, boleh juga disimpan dalam pembolehubah, dilampirkan sebagai sifat objek dll.
Juga, fns boleh dihantar ke fns lain juga. Cth. pengendali pendengar acara.
Kembali dari fns.
Fns ialah objek, dan objek mempunyai kaedah-sifat mereka sendiri dalam JS. Oleh itu, fn boleh mempunyai kaedah serta sifat yang boleh dipanggil pada mereka. Ex call, apply, bind dsb.

Fn Aras Tinggi : Fn yang menerima fn lain sebagai hujah, yang mengembalikan fn baharu atau kedua-duanya. Hanya mungkin kerana fns adalah kelas pertama dalam JS
Fn yang dihantar dalam panggilan balik fn, yang akan dipanggil oleh HOF.

Fns yang mengembalikan fn lain, iaitu dalam Penutupan.

Fns kelas pertama dan HOF ialah konsep yang berbeza.

Panggil Balik Fns Adv:
Benarkan kami membuat abstraksi. Memudahkan untuk melihat masalah yang lebih besar.
Modularkan kod kepada lebih banyak ketulan yang lebih kecil untuk digunakan semula.

// Example for CB & HOF:
// CB1
const oneWord = function(str){
  return str.replace(/ /g,'').toLowerCase();
};

// CB2
const upperFirstWord = function(str){
    const [first, ...others] = str.split(' ');
    return [first.toUpperCase(), ...others].join(' ');
};

// HOF
const transformer = function(str, fn){
  console.log(`Original string: ${str}`);
  console.log(`Transformed string: ${fn(str)}`);
  console.log(`Transformed by: ${fn.name}`);
};
transformer('JS is best', upperFirstWord);
transformer('JS is best', oneWord);

// JS uses callbacks all the time.
const hi5 = function(){
  console.log("Hi");
};
document.body.addEventListener('click', hi5);

// forEach will be exectued for each value in the array.
['Alpha','Beta','Gamma','Delta','Eeta'].forEach(hi5);
Salin selepas log masuk

Fns mengembalikan fn lain.

// A fn returning another fn.
const greet = function(greeting){
  return function(name){
    console.log(`${greeting} ${name}`);
  }
}

const userGreet = greet('Hey');
userGreet("Alice");
userGreet("Lola");

// Another way to call
greet('Hello')("Lynda");

// Closures are widely used in Fnal programming paradigm.

// Same work using Arrow Fns. Below is one arrow fn returning another arrow fn.
const greetArr = greeting => name => console.log(`${greeting} ${name}`);

greetArr('Hola')('Roger');
Salin selepas log masuk

"Anda hanya akan maju apabila anda memahami topik tertentu dengan teliti"

call(), apply(), bind():

Digunakan untuk menetapkan kata kunci 'ini' dengan menetapkan nilainya secara eksplisit.
panggilan - mengambil senarai hujah selepas nilai kata kunci 'ini'.
apply - mengambil tatasusunan hujah selepas nilai kata kunci 'ini'. Ia akan mengambil elemen daripada tatasusunan itu dan menghantarnya ke dalam fungsi.

bind(): Kaedah ini mencipta fungsi baharu dengan kata kunci ini terikat pada objek yang ditentukan. Fungsi baharu mengekalkan konteks ini yang ditetapkan oleh .bind() tidak kira bagaimana fungsi itu digunakan.

panggilan() dan gunakan(): Kaedah ini memanggil fungsi dengan nilai dan hujah ini yang ditentukan. Perbezaan di antara mereka ialah .call() mengambil argumen sebagai senarai, manakala .apply() mengambil argumen sebagai tatasusunan.

const lufthansa = {
  airline: 'Lufthansa',
  iataCode: 'LH',
  bookings: [],
  book(flightNum, name){
    console.log(`${name} booked a seat on ${this.airline} flight ${this.iataCode} ${flightNum}`);
    this.bookings.push({flight: `${this.iataCode} ${flightNum}`, name});
  },
};

lufthansa.book(4324,'James Bond');
lufthansa.book(5342,'Julie Bond');
lufthansa;


const eurowings = {
  airline: 'Eurowings',
  iataCode: 'EW',
  bookings: [],
};

// Now for the second flight eurowings, we want to use book method, but we shouldn't repeat the code written inside lufthansa object.

// "this" depends on how fn is actually called.
// In a regular fn call, this keyword points to undefined.
// book stores the copy of book method defuned inside the lufthansa object.
const book = lufthansa.book;

// Doesn't work
// book(23, 'Sara Williams');

// first argument is whatever we want 'this' object to point to.
// We invoked the .call() which inturn invoked the book method with 'this' set to eurowings 
// after the first argument, all following arguments are for fn.
book.call(eurowings, 23, 'Sara Williams');
eurowings;

book.call(lufthansa, 735, 'Peter Parker');
lufthansa;

const swiss = {
  airline: 'Swiss Airlines',
  iataCode: 'LX',
  bookings: []
}

// call()
book.call(swiss, 252, 'Joney James');

// apply()
const flightData = [652, 'Mona Lisa'];
book.apply(swiss, flightData);

// Below call() syntax is equivalent to above .apply() syntax. It spreads out the arguments from the array.
book.call(swiss, ...flightData);


Salin selepas log masuk

Atas ialah kandungan terperinci Fungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1665
14
Tutorial PHP
1269
29
Tutorial C#
1249
24
Enjin JavaScript: Membandingkan Pelaksanaan Enjin JavaScript: Membandingkan Pelaksanaan Apr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Apr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

JavaScript dan Web: Fungsi teras dan kes penggunaan JavaScript dan Web: Fungsi teras dan kes penggunaan Apr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

JavaScript in Action: Contoh dan projek dunia nyata JavaScript in Action: Contoh dan projek dunia nyata Apr 19, 2025 am 12:13 AM

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami Enjin JavaScript: Butiran Pelaksanaan Memahami Enjin JavaScript: Butiran Pelaksanaan Apr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Apr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs JavaScript: Persekitaran dan Alat Pembangunan Python vs JavaScript: Persekitaran dan Alat Pembangunan Apr 26, 2025 am 12:09 AM

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

See all articles