Para ahli mengambil jalan memutar! Ini tidak ada hubungannya dengan penutupan itu sendiri, dan saya tidak tahu bagaimana mendapatkan judulnya, jadi saya hanya mengumpulkan nomornya. Saya harap saya akan memaafkan saya!
Hari ini, seorang teman yang baru saja belajar JS memberi saya sepotong kode dan bertanya kepada saya mengapa metode itu tidak dieksekusi. Kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
fungsi makeFunc (x) {
return function () {
mengembalikan x;
}
}
waspada (makefunc (0));
Faktanya, bukan karena itu bukan karena itu tidak dijalankan, tetapi teman itu berarti bahwa peringatan itu harus "0", bukan fungsi () {return x;}.
Bukannya skrip itu ditulis salah, hanya saja ia tidak memahami pengembalian, keluar dari fungsi saat ini, dan mengembalikan nilai dari fungsi itu. Jika fungsi yang dikembalikan adalah fungsi, maka fungsi yang dikembalikan itu sendiri juga merupakan fungsi itu sendiri.
Anda dapat memodifikasi kode di atas seperti ini, yang waspada (makefunc (0) ()):
Salinan kode adalah sebagai berikut:
fungsi makeFunc (x) {
return (function () {
mengembalikan x;
}) ();
}
peringatan (makefunc (0) ());
Jika Anda ingin mengembalikan hasil eksekusi fungsi, maka Anda harus terlebih dahulu membiarkan fungsi dieksekusi, misalnya:
Salinan kode adalah sebagai berikut:
fungsi makeFunc (x) {
return (function () {
mengembalikan x;
}) ();
}
waspada (makefunc (0));
Ini adalah fungsi anonim.
Salinan kode adalah sebagai berikut:
(fungsi (){
mengembalikan x;
}) ();
Di dalam braket pertama adalah fungsi anonim, braket kedua digunakan untuk memanggil fungsi anonim, dan Anda dapat lulus dalam parameter yang diperlukan di braket kedua. Misalnya:
Salinan kode adalah sebagai berikut:
(function (x, y) {
peringatan (x + y);
}) (dua puluh tiga);