javascript块级作用域处置惩罚闭包和开释内存的渣滓接纳

内容

一样平常平凡编写代码的时刻很少关注细节,对javascript深层也没详细相识,下面针对一样平常平凡写代码的情势剖析、调解完美本身的代码,这里以一个简朴例子剖析js作用域和渣滓接纳机制,经由过程块级作用域处置惩罚一些细节,提拔本身代码机能。

一般案例

在一样平常中最罕见的代码编写体式格局:

function do(arg) {
    // 做一些事变
}
var doFunc = {...}

do(doFunc);

var btn = document.getElementById( "my_button" );
btn.addEventListener( "click", function click(evt){
    console.log("button clicked");
});

如许编写情势的代码许多,许多时刻在编写的时刻也没注意这些题目,功用却是能完成,代码量少的时刻没事,然则当代码量大,事关代码机能,那就是两回事了。

简朴剖析

这里能够看到btn的点击事宜和doFunc基础没什么关联。这意味着从理论上讲,在 do(..) 运转以后,这个斲丧庞大内存的数据构造能够被作为渣滓接纳。但是,JS引擎极可能(虽然这要看详细完成)将会依然将这个构造坚持一段时间,由于click函数在全部作用域上具有一个闭包。

处置惩罚要领

在一样平常编写代码中巧用块儿作用域能够处理这个题目,我们主动让js引擎清晰的晓得它不必要再保留doFunc。

function do(arg) {
    // 做一些事变
}
{
    let doFunc = {...}
    
    do(doFunc);
}

var btn = document.getElementById( "my_button" );
btn.addEventListener( "click", function click(evt){
    console.log("button clicked");
});

声明能够将变量绑定在当地的明白的块儿是一种壮大的东西,连系本身的代码,合理运用,一步步改良本身的代码。

    原文作者:手里有糖
    原文地址: https://segmentfault.com/a/1190000015820865
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞