资讯专栏INFORMATION COLUMN

javascript块级作用域处理闭包和释放内存的垃圾回收

vpants / 2349人阅读

摘要:然而,引擎很可能虽然这要看具体实现将会仍然将这个结构保持一段时间,因为函数在整个作用域上拥有一个闭包。

内容

平时编写代码的时候很少关注细节,对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://www.ucloud.cn/yun/96432.html

相关文章

  • 前端面试之闭包

    摘要:在函数内部的变量称之为局部变量,它可以在函数内部读取,在函数外部无法正常读取,如果想要读取函数内部的变量则需要用到闭包。 前端面试之闭包 闭包属于属于JavaScript的难点,但是在很多高级应用都需要用到,也是前端面试中经常会考到的点。 作用域 谈到闭包首先必须了解作用域,ES5中,JavaScript的作用域只有两种,一种是全局作用域,变量在整个程序中一直存在,所有地方都可以读取;...

    jackzou 评论0 收藏0
  • 夯实基础-作用闭包

    摘要:作用域分类作用域共有两种主要的工作模型。换句话说,作用域链是基于调用栈的,而不是代码中的作用域嵌套。词法作用域词法作用域中,又可分为全局作用域,函数作用域和块级作用域。 一篇巩固基础的文章,也可能是一系列的文章,梳理知识的遗漏点,同时也探究很多理所当然的事情背后的原理。 为什么探究基础?因为你不去面试你就不知道基础有多重要,或者是说当你的工作经历没有亮点的时候,基础就是检验你好坏的一项...

    daydream 评论0 收藏0
  • 浅谈对JavaScript闭包理解

    摘要:关于循环和闭包当循环和闭包结合在一起时,经常会产生让初学者觉得匪夷所思的问题。闭包是一把双刃剑是比较难以理解和掌握的部分,它十分强大,却也有很大的缺陷,如何使用它完全取决于你自己。 在谈闭包之前,我们首先要了解几个概念: 什么是函数表达式? 与函数声明有何不同? JavaScript查找标识符的机制 JavaScript的作用域是词法作用域 JavaScript的垃圾回收机制 先来...

    missonce 评论0 收藏0
  • JavaScript学习笔记 - 变量、作用内存问题

    摘要:语句中的块语句对来说,将会指定对象添加到作用域链中。在严格模式下,初始化未经声明的变量会导致错误。查询标识符搜索过程从作用域链的前端开始,向上逐级查询与给定名字匹配的标识符。 本文记录了我在学习前端上的笔记,方便以后的复习和巩固。 4.1基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型指的是简单的数据段,而引用类型值指那些可...

    lavnFan 评论0 收藏0
  • 详解js变量、作用内存

    摘要:不是引用类型,无法输出简而言之,堆内存存放引用值,栈内存存放固定类型值。变量的查询在变量的查询中,访问局部变量要比全局变量来得快,因此不需要向上搜索作用域链。 赞助我以写出更好的文章,give me a cup of coffee? 2017最新最全前端面试题 基本类型值有:undefined,NUll,Boolean,Number和String,这些类型分别在内存中占有固定的大小空...

    waltr 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<