《你不知道的JavaScript(上卷)》第一部分:作用域与闭包的读书笔记

《你不知道的JavaScript(上卷)》第一部分:作用域与闭包的读书笔记

作用域和闭包
1、介绍了作用域,主要说明了RHS和LHS这两个概念。RHS是读取值,LHS是赋值。
2、词法作用域:有两个机制可以动态改变词法作用域:eval和with。eval可以运行字符串代码,动态修改已经存在的词法作用域。with可以在属性不存在的时候,将此属性泄漏到全局作用域
3、介绍了词法作用域里面的函数作用域和块作用域。
函数作用域本质上是隐藏函数内部的变量和函数,符合最小暴露原则。
块作用域必须要使用let关键字才能生效,在块作用域中使用var关键字声明的变量仍然是定义在外部作用域(函数或全局)中。
4、变量提升出现的原因:var变量声明是在编译阶段进行的,变量赋值/使用是在运行阶段。
函数和变量声明都会被提升。函数声明会被提升,函数表达式不会被提升。
函数和变量同时被提升时,函数会优先提升。
块作用域只能限制变量,声明的函数还是会被提升到外部作用域顶部。
5、闭包:函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包。
闭包无处不在。你写的代码,只要有回调就肯定有闭包产生。

おすすめ

転載: blog.csdn.net/cuipp0509/article/details/121145567