作用域和闭包

定义变量

js代码在运行时 会初始化执行环境,这个执行环境就是定义变量。

定义变量就是变量所属的对象

1、全局执行的代码,程序顶层(不属于某个函数)中的变量、函数等 他的变量对象是window

2、函数体内的代码,它执行时 也会初始化环境,定义函数体内变量所属的变量对象,也叫激活对象

相当于创建了一个临时对象,函数执行完毕后立即销毁

函数作用域

函数作用域就是通过函数来分离作用域,函数体外的是全局,函数体内是局部,局部变量只能作用域函数体内

块级作用域

let和const 用来创建块级作用域,let a 的本质是在创建a所属的块级作用域

let创建块级作用域就类似于函数{}作用域的功能,可以认为 let和const对函数作用域的升级,除了函数以外 还可以用let const 创建作用域

作用域链

函数在执行的过程中,先从自己内部找变量,

如果找不到,再从创建当前函数所在的作用域去找, 以此往上

词法作用域

闭包

当外围函数f的嵌套函数g 在外部被执行时,外围函数的一次特定调用的激活对象fAO 保留下来,这就是闭包

上面的词法作用域也形成了闭包

另外一种写法


利用对象特性创建闭包

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容