Saya mempunyai banyak kekeliruan tentang situasi di mana nilai lalai parameter fungsi ialah fungsi
Sebagai contoh
let foo = 'outer';
function bar(func = x => foo) {
let foo = 'inner';
console.log(func());
}
bar(); //outer
Menurut pengenalan Ruan Yifeng kepada ES6, saya tahu bahawa jika parameter fungsi adalah nilai lalai, akan ada skop peringkat blok yang membungkus parameter terlebih dahulu, dan skop peringkat blok akan hilang selepas pemulaan selesai
Sebaik sahaja nilai lalai parameter ditetapkan, parameter akan membentuk skop (konteks) berasingan apabila fungsi diisytiharkan dan dimulakan. Apabila permulaan selesai, skop ini akan hilang. Tingkah laku tatabahasa ini tidak akan muncul apabila nilai lalai parameter tidak ditetapkan.
Saya boleh faham jika nilai lalai ialah pembolehubah biasa, tetapi saya masih tidak faham mengapa output di sini adalah luar dan bukannya dalam
Satu ayat: Penutupan fungsi terbentuk apabila ia ditakrifkan, bukan apabila ia dijalankan.
Kembangkan gula sintaksis dengan teliti dan anda sepatutnya dapat melihatnya dengan lebih jelas
Lihat,
fk_compiler
里是不是只能返回外部作用域下的foo
?js ialah skop leksikal dan nilai foo mengambil nilai apabila fungsi ditakrifkan dan bukannya apabila ia dilaksanakan.
Berdasarkan kod responden:
fk_compiler
被声明的作用域在全局,所以,它会去访问全局作用域中的foo
. Jawapannya akan keluar.Kod serupa: