【JS-task4】 如何理解JS作用域与作用域链?

分享人:陈占乐

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

JavaScript 中存在两种作用域:全局作用域和函数作用域,不存在块级作用域。全局作用域在浏览器中是window对象。

执行环境(execution context)是JavaScript 中最为重要的一个概念,定义了变量和函数访问其它数据的权力。

2.知识剖析

变量的可访问性

1 非严格模式下不声明直接使用变量,变量会成为全局变量

2 和作用域对应的全局变量和局部变量(函数内变量)

作用域链

执行环境会创建变量对象的作用域链。

作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。

作用域链的前端始终是当前执行代码所在环境的变量对象。全局执行环境的变量对象始终是作用域链中最后一个对象。

这有两方面的影响:1 变量只能沿着自身所在的作用域链查找,直到找到为止,否则返回错误;2 隔离其它变量。

简化来说:就是一个调用变量形成的查找过程;把它再和执行环境结合起来包装形成作用域链。

3.常见问题

延长作用域链

4.解决方案

try - catch 语句的 catch 块

with 语句

在作用域链前端临时增加一个变量对象,该对象会在代码执行之后移除

5.编码实战

demo

6.扩展思考

this

this 关键字是 JavaScript 中最复杂的机制之一。它是一个很特别的关键字,被自动定义在 所有函数的作用域中。

this 对象是在运行时基于函数执行环境绑定的。

闭包

函数嵌套形成的整个执行环境就是闭包。

1 内部函数只可以在外部函数中访问。

2 内部函数形成了一个闭包:它可以访问外部函数的参数和变量,但是外部函数却不能使用它的参数和变量。

7.参考文献

参考一  MDN文档

参考二  js 高程

8.更多讨论

鸣谢

感谢大家观看

BY : 陈占乐