javascript - Selesaikan beberapa masalah kecil dengan fungsi js
为情所困
为情所困 2017-05-19 10:26:59
0
5
555

Memandangkan nama fungsi js ialah penunjuk kepada objek fungsi, adakah ia merujuk kepada ingatan?
`

        var a=function(c){
            return  ++c;
        }
        console.log(a(1));

        var b=a;
        console.log(b(1));

        var a=null;
        console.log(b);
        console.log(b(1));

` , jadi bagaimana untuk melakukan pemusnahan manual? Adakah pembolehubah global perlu ditutup sebelum penyemak imbas dikitar semula? Terima kasih atas penyelesaiannya

为情所困
为情所困

membalas semua(5)
迷茫

Mula-mula, var a akan membuka ruang dalam tindanan, dan kemudian anda menetapkannya kepada fungsi, yang merupakan jenis rujukan, dan kemudian dalam heap digunakan untuk ruang lain untuk menyimpan function Pada masa ini, a dalam stack menyimpan The alamat fungsivar a会在stack里面开一块空间,然后你将他赋给一个function,是一个引用类型,于是又在heap里面又申请一块空间存放function,此时,stack里面的a存放的是function的地址

而下面,将b赋值给a,是将stack里面a指向的heap里面function的地址赋给b,所以这就是为什么后来a指向了null,但是b仍然指向之前heap里面function的原因。

如何销毁?将b也设置为null

Dan di bawah, tetapkan b kepada a, iaitu timbunana dalam tindanan Alamat fungsi dalam /code> diberikan kepada b, jadi inilah sebabnya kemudian a menunjuk ke null, tetapi Sebab mengapa b masih menunjuk kepada fungsi dalam timbunan sebelumnya. 🎜 🎜Bagaimana untuk memusnahkan? Hanya tetapkan b kepada null atau nilai lain. Jadi cuba untuk tidak menulis pembolehubah global untuk pembolehubah jenis ini, tulis pembolehubah tempatan. 🎜
滿天的星座

Adakah ia merujuk kepada ingatan? Soalan ini agak terlalu luas Data disimpan dalam ingatan, jadi ia adalah semulajadi untuk rujukan memori
Tetapi ia bukan semudah merujuk memori hanya bertanggungjawab untuk menyimpan data, dan hubungan antara data tidak dapat dicerminkan, jadi ia tidak secara langsung merujuk memori
Terdapat pemprosesan tersembunyi di tengah-tengah terdapat teori asas tentang cara mengendalikannya, tetapi sebenarnya hanya sedikit orang yang mengetahui butiran khusus tahap terlalu rendah

Selain itu, terdapat dua cara kitar semula:

1, 设置null, 等待自动清空
a = null;
会在回收程序执行的时候自动清空
2, 立刻清空
delete a;
直接执行回收
但老ie并不支持这种操作

Secara amnya, hanya gunakan kaedah 1. Jangan risau tentang limpahan Terdapat banyak pencetus untuk kitar semula automatik, seperti masa, seperti apabila data mencapai jumlah tertentu

.
伊谢尔伦
     // 那么在最后应该将 op 解除引用来避免内存泄漏。
     // 所谓的内存泄露,就是被分配的内存既不能被使用,也不能够被回收的一个现象。
     // 低版本的IE浏览器中,DOM对象与javascript对象形成循环引用,
     // 那么就有可能产生内存泄露,除非人为的切断引用。

     function box() {
        var op = document.getElementById('op');
        var text = op.innerHTML;
        op.onclick = function () {
            alert(text);
         };
         op = null; //解除引用
     }
        
    box();
        
    // 节省内存
    // PS:如果并没有使用解除引用,那么需要等到浏览器关闭才得以释放。
漂亮男人

js boleh menggunakan padam untuk mengitar semula pembolehubah secara manual

黄舟

Mengenai mekanisme pengumpulan sampah:
Di bawah versi lama IE, DOM adalah dalam bentuk objek COM dan dibersihkan menggunakan pengiraan rujukan Jika terdapat rujukan bulat, tidak akan ada peluang untuk melepaskan memori.
Dalam penyemak imbas standard, ia adalah kaedah pembersihan tanda Anda hanya perlu melepaskan rujukan secara manual dan menetapkannya kepada null untuk melepaskan memori.

Jika rujukan tidak dinyahrujuk, ingatan tidak akan dikeluarkan sehingga persekitaran pelaksanaan dikeluarkan, dan objek pembolehubah global tidak akan dikeluarkan sehingga persekitaran pelaksanaan global keluar, iaitu, ia tidak akan dikeluarkan sehingga penyemak imbas ditutup .

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan