Mula belajar ungkapan fungsi javascript dan baca yang berikut dengan teliti.
1. Dalam bentuk umum untuk mencipta fungsi, pengisytiharan fungsi akan dibaca sebelum melaksanakan kod, jadi pengisytiharan fungsi boleh ditulis di bawah panggilan fungsi:
sayHi(); function sayHi(){ alert("Hi!"); }
2. Gunakan ungkapan fungsi untuk mencipta fungsi, yang mesti diberikan nilai sebelum memanggil:
sayHi(); //错误!!函数不存在 var sayHi=function(){ alert("Hi!"); }
3. Rekursi
Rekursi am
function factorial(num){ if (num <= 1){ return 1; } else { return num * factorial(num-1); } }
arguments.callee ialah penunjuk kepada fungsi yang sedang dilaksanakan, yang boleh digunakan untuk melaksanakan rekursi:
function factorial(num){ if (num <= 1){ return 1; } else { return num * arguments.callee(num-1); } }
4. Penutupan ( Penutupan merujuk kepada fungsi yang boleh mengakses pembolehubah dalam skop lain ).
Cara biasa untuk membuat penutupan ialah mencipta fungsi di dalam fungsi lain. Apabila fungsi dilaksanakan, persekitaran pelaksanaan dan rantai skop yang sepadan dicipta. Penutupan hanya boleh mengambil nilai terakhir mana-mana pembolehubah dalam fungsi yang mengandungi:
function createFunctions(){ var result = new Array(); for (var i=0; i < 10; i++){ result[i] = function(){ return i; }; } return result; } var funcs = createFunctions(); //every function outputs 10 for (var i=0; i < funcs.length; i++){ document.write(funcs[i]() + "<br />"); }
Kod di atas mengeluarkan kesemua 10. Ini kerana: setiap fungsi funcs menyimpan objek aktif createFunctions() (iaitu fungsi, objek dan jenis rujukan Jenis Fungsi), dan objek aktif createFunctions() mempunyai pembolehubah i, jadi setiap Setiap fungsi akan mempunyai ini pembolehubah i, dan apabila fungsi createFunctions() mengembalikan hasilnya, i telah menjadi 10. Jadi setiap nilai tatasusunan fungsi ialah 10.
Boleh diubah suai seperti berikut:
function createFunctions(){ var result = new Array(); for (var i=0; i < 10; i++){ result[i] = function(num){ return function(){ return num; }; }(i); } return result; }
Apabila setiap fungsi tanpa nama dipanggil, nilai semasa i diberikan kepada num, dan di dalam fungsi tanpa nama, penutupan num dibuat dan dikembalikan. Dengan cara ini, setiap fungsi yang mengembalikan tatasusunan mempunyai salinan pembolehubah num sendiri. (Perenggan ini tidak dijelaskan dengan jelas, pembaca boleh memikirkannya sendiri. Jika ada cara yang lebih baik untuk menerangkannya, sila komen di bawah artikel, terima kasih)
5. objek ini
6. Tiru skop peringkat blok (skop peribadi)
Seperti berikut:
function outputNumbers(count){ for (var i=0; i < count; i++){ alert(i); } alert(i); //count } outputNumbers(5);
Dalam bahasa seperti Java, pembolehubah i in untuk dimusnahkan apabila digunakan. Dalam JavaScript, objek aktif dijana apabila outputNumbers dipanggil, dan i ini tergolong dalam objek aktif ini, jadi kerana ia ditakrifkan, ia boleh diakses di mana-mana dalam fungsi, dan ia dikongsi dalam objek aktif.
Sintaks untuk fungsi tanpa nama (membuat skop peribadi):
(function(){ //这里是块级作用域 })();
Pengisytiharan fungsi diletakkan dalam kurungan, menunjukkan bahawa ia adalah ungkapan dan menambah kurungan selepas ia boleh memanggilnya dengan segera.
Jika anda memerlukan beberapa pembolehubah buat sementara waktu, anda boleh menggunakan skop peribadi:
function outputNumbers(count){ (function () { for (var i=0; i < count; i++){ alert(i); } })(); alert(i); //causes an error }
Dalam kod di atas, i adalah peribadi, dan ralat akan dilaporkan apabila i diakses di luar fungsi tanpa nama (domain peribadi), walaupun amaran masih dalam objek aktif.
7. Pembolehubah persendirian
Parameter, pembolehubah tempatan dan fungsi lain yang ditakrifkan di dalam fungsi adalah semua pembolehubah peribadi fungsi. Contohnya:
function add(num1,num2){ var sum = num1 + num2; return sum; }
Terdapat 3 pembolehubah peribadi: num1, num2, sum. Mereka boleh diakses di dalam fungsi, tetapi tidak di luar.
Kaedah istimewa boleh mengakses pembolehubah persendirian: secara ringkas, gunakan ungkapan untuk menutupnya dan akses fungsi lain di dalam penutupan:
function Person(name){ var a=0; this.getName = function(){ return name + a; }; this.setName = function (value) { name = value; }; }
This.getName dan this.setName ialah kaedah ungkapan Selepas mencipta instance Person, nama dan atribut hanya boleh diakses melalui getName atau setName.
Di atas adalah keseluruhan kandungan artikel ini, saya harap ia akan membantu kajian semua orang.