Pertama-tama, ada konsep: ini bukanlah bahasa yang mendukung fungsi. Selain dipanggil, fungsi dalam bahasa fungsional juga memiliki beberapa sifat lainnya. Ada tiga poin:
1. Fungsi adalah operan
2. Simpan data dalam fungsi
3. Pengoperasian di dalam fungsi tidak menimbulkan efek samping di luar fungsi
1. Fungsi adalah operan
Saat memanggil fungsi normal, secara abstrak dapat dipahami sebagai: fungsi tersebut adalah operator, dan parameter yang diteruskan adalah operan;
Namun ketika suatu fungsi dalam JavaScript digunakan sebagai parameter dari fungsi lain, referensi diteruskan, dan "parameter masuk" ini dapat dipahami sebagai operan. Kesimpulannya adalah fungsi (sebagai "parameter masuk") memiliki arti operan, dan "parameter fungsi" tidak berbeda dengan parameter biasa.
2. Simpan data dalam fungsi
Dalam bahasa imperatif, variabel privat (variabel lokal) di dalam fungsi tidak dapat disimpan. Dari perspektif eksekusi program, variabel lokal dialokasikan pada tumpukan, dan setelah eksekusi fungsi berakhir, tumpukan yang ditempati dilepaskan. Oleh karena itu, data dalam fungsi tersebut tidak dapat disimpan.
Dalam fungsi JavaScript, variabel pribadi dalam fungsi dapat dimodifikasi, dan ketika fungsi tersebut "dimasukkan" lagi, status yang dimodifikasi akan dilanjutkan. Contoh berikut mengilustrasikan fitur ini:
Copy kode kodenya sebagai berikut:
var set,dapatkan;
fungsi Fungsi Saya(){
nilai var = 100;
fungsi set_nilai(v){
nilai = v;
}
fungsi get_value(){
nilai kembalian;
}
set = set_nilai;
dapatkan = dapatkan_nilai;
}
Fungsi Saya();
konsol.log(dapatkan()); //100
mengatur(300);
konsol.log(dapatkan()); //300
Manfaat yang jelas adalah jika sepotong data dapat disimpan dalam suatu fungsi, maka fungsi tersebut (sebagai konstruktor) dapat menggunakan data tersebut untuk melakukan operasi ketika ditugaskan ke sebuah instance dan di antara beberapa instance, karena data tersebut berada di In yang berbeda penutupan, mereka tidak akan mempengaruhi satu sama lain.
Untuk menjelaskannya dalam istilah berorientasi objek, ini berarti bahwa berbagai instance memiliki data pribadinya sendiri (disalin dari beberapa data publik). Contoh berikut mengilustrasikan fitur ini:
Copy kode kodenya sebagai berikut:
fungsi Objek Saya(){
nilai var = 100;
ini.setValue = fungsi(){
nilai = v;
}
ini.showValue = fungsi(){
console.log(nilai);
}
}
var obj1 = Objek Saya baru();
var obj2 = Objek Saya baru();
obj2.setValue(300);
obj1.showValue(); //100;
3. Pengoperasian di dalam fungsi tidak menimbulkan efek samping di luar fungsi
Arti dari fitur ini adalah:
* Fungsi ini menggunakan parameter entri untuk melakukan operasi tanpa mengubahnya (digunakan sebagai parameter nilai, bukan parameter variabel)
* Nilai data lain di luar fungsi (seperti variabel global) tidak akan diubah selama operasi.
* Setelah operasi selesai, nilai ditransfer ke sistem eksternal melalui "pengembalian fungsi"
Fungsi tersebut tidak memiliki efek samping pada sistem eksternal selama pengoperasian. Namun, kami memperhatikan bahwa JavaScript memungkinkan variabel global untuk direferensikan dan dimodifikasi di dalam fungsi, dan variabel global bahkan dapat dideklarasikan. Ini sebenarnya merusak karakteristik fungsionalnya.
Selain itu, JavaScript juga memungkinkan anggota objek dan array untuk dimodifikasi dalam fungsi - anggota ini harus dimodifikasi dengan metode objek daripada fungsi lain di luar sistem objek.
Jadi: Fitur JavaScript ini hanya dapat dijamin oleh kebiasaan pemrograman pengembang.