javascript - Biasanya semua orang menggunakan fungsi untuk penutupan Bagaimana jika saya menggunakan objek atau penutupan?
PHP中文网
PHP中文网 2017-05-19 10:42:53
0
3
634
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. . . .

PHP中文网
PHP中文网

认证高级PHP讲师

membalas semua(3)
淡淡烟草味

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~

滿天的星座

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.

淡淡烟草味

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 = =

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!