Rumah > Soal Jawab > teks badan
let a = [];
function test1(){
let ta = Math.random();
let tb = "test2";
let obj1 = {
t1: ta
}
a.push(obj1);
}
test1();
Adakah fungsi test1 masih mengeluarkan memori selepas memanggilnya seperti ini?
Pembolehubah global a mengandungi rujukan kepada objek, yang berada dalam ujian fungsi1 Mengapa saya fikir ujian1 tidak akan melepaskan memori? Tolong beri saya nasihat. . . .
淡淡烟草味2017-05-19 10:44:53
a dan test1 berkongsi konteks larian, iaitu a dan test1 wujud bersama dan mati~
Saya tidak tahu jika pemahaman saya salah~Contohnya:
function test() {
let a = [];
function test1(){
let ta = Math.random();
let tb = "test2";
let obj1 = {
t1: ta
}
a.push(obj1);
}
test1();
}
test();
Selepas melaksanakan ujian, saya rasa ujian1 akan dikeluarkan, dan ujian juga akan dikeluarkan.
Jika ia tiada dalam fungsi tetapi terus di bawah tetingkap, test1 akan sentiasa wujud~
滿天的星座2017-05-19 10:44:53
Saya salah faham sebelum ini, ini sepatutnya menjadi dua masalah.
Selepas pelaksanaan, pembolehubah test1 tidak dirujuk secara langsung, jadi persekitaran pelaksanaan test1, iaitu konteks, harus dikitar semula. Ini bukan penutupan. Selain itu, badan fungsi test1 itu sendiri adalah atribut yang dimiliki oleh konteks di mana ia berada selagi konteks masih ada, badan fungsi itu sendiri tidak akan dikitar semula.
淡淡烟草味2017-05-19 10:44:53
Mari kita bercakap tentang kesimpulan dahulu, bukan
Pertama sekali, definisi penutupan adalah fungsi yang boleh mengakses pembolehubah bebas, yang tidak konsisten dengan definisi
Jika pemahaman anda salah
Sila ubah contoh anda
let a = [];
function test1(){
let ta = Math.random();
let tb = "test2";
let obj1 = {
t1: ta
}
return obj1;
}
a.push(test1())
Objek yang ditunjuk oleh original obj1 juga wujud dalam a, tetapi adakah anda fikir ini masih merupakan penutupan?
Dalam contoh anda, selepas test1 dilaksanakan, ta, tb, dan obj1 semuanya dilepaskan
Objek yang ditunjuk oleh pembolehubah obj1 yang dicipta di dalamnya ditambah kepada pembolehubah global a kepada objek ini. Memandangkan objek ini dirujuk oleh a[0], ia tidak akan dilepaskan, tetapi ia tiada kaitan dengan obj1 Skop obj1 tidak berubah semasa keseluruhan proses ditunjuk oleh obj1 dan bukannya obj1
Saya tidak tahu sama ada anda boleh memahami ini kemahiran bahasa Cina saya sangat lemah sehingga saya rasa saya tidak dapat menerangkan dengan jelas = =