作用域、闭包

作用域

作用域指程序中定义变量的区域,它决定了当前执行代码对变量的访问权限。

由于作用域的限制,每段独立的执行代码块只能访问自己作用域和外层作用域中的变量,无法访问到内层作用域的变量。

  • 全局作用域

    全局作用域为程序的最外层作用域,一直存在。

  • 函数作用域

    函数作用域只有函数被定义时才会创建,包含在父级函数作用域 / 全局作用域内。

作用域链

当可执行代码内部访问变量时,会先查找本地作用域,如果找到目标变量即返回,否则会去父级作用域继续查找…一直找到全局作用域。我们把这种作用域的嵌套机制,称为 作用域链。

闭包

能够访问其他函数内部变量的函数称为闭包

  • 场景:柯里化函数
内存泄露

当一块内存不再被应用程序使用的时候,由于某种原因,这块内存没有返还给操作系统或者内存池的现象。内存泄漏可能会导致应用程序卡顿或者崩溃。

除闭包外, 全局变量的无意创建也可能导致内存泄露

垃圾回收机制

js中的垃圾回收机制是 引用计数收集:即当内存中的一个变量被引用一次,计数就+1。垃圾回收机制会以固定的时间轮询这些变量,将计数为 0的变量标记为失效变量并将之清除从而释放内存。

但闭包导致把作用域与外部环境隔离开,变量的引用都在函数内部完成,导致一直占用这个变量,JS 引擎无法判断你什么时候还会调用闭包函数,只能一直让这些数据占用着内存。当闭包使用过度导致内存无法释放,称之为内存泄露

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值