《你不知道的javascript》——词法/函数/块作用域

Posted cx2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《你不知道的javascript》——词法/函数/块作用域相关的知识,希望对你有一定的参考价值。

 

你不知道的javascript(上卷)

 
 

视频选集

1/4

 

技术图片

 

 

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

技术图片

 

 技术图片

 

 技术图片

 

欺骗词法:

作用域恶魔

 

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

另外一个不推荐使用 eval(..) 和 with 的原因是会被严格模式所影响(限 制)。with 被完全禁止,而在保留核心功能的前提下,间接或非安全地使用 eval(..) 也被禁止了。

技术图片

 

 

技术图片

 

 

隐藏函数内部实现

 

技术图片

 

 for 循环永远不会停止

var i 在全局作用域,每次调用 bar 函数就会被重置为3

 

解决方案之一:

技术图片

 

 

解决方案二:

技术图片

 

 类似地:模块封装

 

技术图片

 

 

 

技术图片

 

技术图片

 

 

具名:自身的引用更容易

技术图片

 

 

 

 

技术图片

 

 技术图片

 技术图片

 

 

技术图片

 

 技术图片

 

 

UMD模式:

技术图片

 

 

块作用域:

js 里面 if else 并没有实现块作用域

 

with 是一个块级作用域

技术图片

 

 

try catch 

技术图片

 

 

 

es6:let / const

技术图片

 

 

var 改 let,则只作用于块内

 

技术图片

 

 

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

变量的声明:编译阶段;

变量的赋值:运行阶段;

 

技术图片

 

 

 

函数声明也会提升(比如 下面报的不是 type error : foo is not a func 错误

技术图片

 

 

技术图片

 

 提升只适用于作用域内

var a=2 并不在外面的作用域,所以console.log(a) 就是 not defined 错误了

 

技术图片

 

 

重复的 var 声明会被忽略掉(再次声明直接取前续声明的LHS地址),但出现在后面的函数声明还是可以覆盖前面的 

函数重复声明:后面的声明会覆盖前面的声明

 

技术图片

 

 

技术图片

 

 

技术图片

 

 

let 和 const 关键字不会造成提升

 

 

以上是关于《你不知道的javascript》——词法/函数/块作用域的主要内容,如果未能解决你的问题,请参考以下文章

你不知道的JavaScript上卷 - 读书笔记 - 第2章词法作用域-2.2 欺骗词法

你不知道的javascript--上卷--读书笔记2

作用域闭包《你不知道的JavaScript(上)》

作用域闭包《你不知道的JavaScript(上)》

JS你不知道的JavaScript 笔记—— 作用域与闭包 - 编译原理 - LHS - RHS - 循环与闭包 - 模块 - 词法作用域 - 动态作用域

你不知道的JS系列 ( 7 ) - 欺骗词法作用域