作用域与闭包回顾

  1. javascript 语言层面只原生支持两种作用域类型:全局作用域 和 函数作用域 。全局作用域程序运行就有,函数作用域只有定义函数的时候才有,它们之间是包含的关系。
  2. 作用域之间是可以嵌套的,我们把这种嵌套关系称为 作用域链。
  3. 可执行代码在作用域中查询变量时,只能查询 本地作用域 及 上层作用域,不能查找内部的函数作用域。JS 引擎搜索变量时,会先询问本地作用域,找到即返回,找不到再去询问上层作用域...层层往上,直到全局作用域。
  4. javascript 中使用的是 “词法作用域”,因此函数作用域的范围在函数定义时就已经被确定,和函数在哪执行没有关系。
  5. 有权访问另一个函数内部变量的函数,我们称为 闭包。闭包的本质是利用了作用域的机制,来达到外部作用域访问内部作用域的目的。
  6. 闭包的使用场景非常广泛,然而过度使用会导致闭包内的变量所占用的内存空间无法释放,带来 内存泄露 的问题。
  7. 我们可以借助于 chrome 开发者工具查找代码中导致了内存泄露的代码。
  8. 避免内存泄露的几种方法:避免使用全局变量、谨慎地为DOM 绑定事件、避免过度使用闭包。
posted @ 2023-02-24 11:33  Samsara315  阅读(7)  评论(0编辑  收藏  举报