Semasa saya mempelajari masalah penutupan js, saya menaip dan bereksperimen dengan contoh kod pada pengaturcaraan lanjutan js, tetapi hasilnya tidak konsisten dan saya tidak dapat memikirkannya.
function createFunction(){
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function(){
// console.log(i);
return i;
};
}
return result;
}
Hasil kod ini mestilah tatasusunan, setiap nilai ialah 10, tetapi selepas bereksperimen dalam penyemak imbas, saya mendapati bahawa apa yang dikembalikan ialah tatasusunan fungsi.
Mengapa ia tidak mengembalikan tatasusunan berangka?
ialah susunan fungsi Walaupun setiap fungsi mempunyai nilai pulangan i, fungsi ini tidak dilaksanakan.
Baca muka surat 181 buku dengan teliti, ayat pertama di bawah kod.
Saya agak keliru apabila saya melihat ini sebelum ini. Saya rasa lebih intuitif untuk mengembalikan kesemua 10 secara langsung. Selepas memikirkannya, jika saya menambah () terus selepas fungsi yang dikembalikan, ia bersamaan dengan mencipta fungsi pelaksanaan segera setiap kali I yang dikembalikan ialah nilai indeks biasa setiap kali, yang tidak akan mencapai kesan yang diingini.
Kerana anda hanya menetapkan fungsi kepada elemen tatasusunan dan tidak memanggil fungsi ini.
hasil ialah tatasusunan yang elemennya adalah fungsi.
Sebab itulah anda berada dalam situasi ini
Jika anda ingin mendapatkan semua yang anda mahukan
10
, hanya lelaran pada tatasusunan dan panggil fungsi yang merupakan elemen tatasusunan, dan log nilai pulangan