Lihat masalah penutupan berikut
var x=10;
function fn() {
console.log(x);
}
function show(f) {
var x=20;
(function() {
f();
})();
}
show(fn);
Ia mencetak 10 dan bukannya 20. Apabila x diambil, bukankah ia akan melihat di sepanjang rantai skop Jika rantai skop ditentukan apabila fungsi dicipta, hasilnya akan menjadi 10. Jika ia ditentukan apabila fungsi itu? dipanggil, ia sepatutnya 20. Ya Tidak pernyataan yang tepat tentang rantai skop? Apakah rupa rantai skop yang tepat di sini? Adakah fn dan show berada pada tahap yang sama atau adakah fn dalam show?
Rantai skop ditentukan apabila fungsi ditakrifkan.
https://developer.mozilla.org...
Rantai skop adalah dinamik, jadi ia ditentukan pada masa panggilan.
Tetapi dalam kod anda, fungsi() yang ditakrifkan oleh penutupan ialah skop paling luar pengikatan
Fungsi yang diisytiharkan oleh fungsi lalai kepada skop paling luar pengikatan
(saya pun tengah belajar...)
Buat rantai skop yang mengandungi objek pembolehubah global apabila fungsi dicipta dan simpannya dalam atribut [[Skop]] dalaman. Apabila fungsi dilaksanakan, persekitaran pelaksanaan akan dibuat Dengan menyalin objek dalam atribut [[Skop]], rantaian skop persekitaran pelaksanaan akan dibina dan objek aktifnya sendiri akan ditolak ke hujung hadapan. rantaian skop untuk membentuk satu rantaian domain yang lengkap. [[Skop]] memegang rujukan kepada pembolehubah global, bukan salinan nilai.
Kaedah penutupan panggilan adalah bersamaan dengan kesan berikut Contoh yang diberikan di bawah menggambarkan melalui perbandingan bahawa rantai skop berkaitan dengan kedudukan apabila fungsi ditakrifkan.
Pautan soalan yang berkaitan ditambah. /q/10…. Terdapat perbincangan mengenai rantai skop.
Dalam mod tidak ketat, titik mana-mana IIFE ini ialah tingkap
Di atas tidak betul. . .