作用域,作用域链,立即执行函数,闭包
作用域
[[scope]]:指的就是我们所说的作用域,其中存储了运行期上下文的集合。
每个JavaScript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性([[scope]])仅供JavaScript引擎存取。
作用域链:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,这种链式链接叫作用域链。
执行期上下文
AO{}
每个函数都有它的执行期上下文的集合 叫作用域链。
函数执行完,执行期上下文销毁。
-----------------------------------------------------------------------------------
作用域&执行期上下文精讲:
a执行 – > 产生AO{}
放在作用域的顶端
拿的就是a的AO{} -->引用
a执行完:
b完全被销毁
多层函数作用域链:
闭包
定义:
但凡是内部的函数保存到外部,必定产生闭包
这里的泄露是指占内存,导致内存泄漏
闭包实例1:
注解:b的AO{}执行然后销毁,但是a的AO{}没有扔,改变了。大概如下图:
闭包的作用
作用累加例子:
作用做缓存例子:
(补充)对象:
作用三例子:
立即执行函数
定义:
例:执行完就被释放
执行完就被释放
跟其它函数无其它差别
例:多种方式
A方式:
B方式:
把d用num接收:
输出
精讲补充:
只有表达式才能被执行符号执行
能被执行符号执行的表达式–> 立即执行函数
它会忽略函数名
补充
不报错 不执行。
系统理解为:
闭包和立即执行函数
如下:
等到执行的时候,才会去找i的值是多少
所以打印了都是10
解决:
如下:
注:来源网课视频整理
// An highlighted block
var foo = 'bar';