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