一、作用域
在 JavaScript 中作用域类型:
1.局部作用域:只能在函数内部访问
函数内部定义的变量从函数外部是不可见的 (也就是说 子能用父)
2.全局作用域:网页的所有脚本和函数都能够访问
函数外部定义的变量,函数内部是可以调用的(父不能用子)
每个函数创建时都会产生作用域
作用域决定了变量的可见性 (就是在哪能用 在哪不能用)
作用域:变量生效的范围
3.块级作用域
是一个语句,将多个操作封装在一起,通常是放在一个大括号里,没有返回值。
在ES6之前,函数只能在全局作用域和函数作用域中声明,不能在块级作用域中声明。没有块级作用域导致很多场景不合理
内存变量可能覆盖外层变量
用来计数的循环变量泄露为全局变量
ES6中的块级作用域:
1、允许块级作用域任意嵌套,外层作用域无法读取内层作用域的变量
2、内层作用域可以定义外层作用域的同名变量
3、不需要立即执行匿名函数
立即执行函数
二、作用域链
当查找变量的时候,会先从当前上下文的变量对象中查找
没找到,会从父级执行上下文的变量中查找,一直找到全局上下文的变量对象,也就是全局对象
这样由多个执行上下文的变量对象构成的链表就叫做作用域链
说人话就是多个作用域嵌套从而产生了作用域链
JavaScript中的作用域与作用域链解析,
文章详细阐述了JavaScript中的三种作用域:局部作用域(函数内部),全局作用域(所有脚本和函数可访问),以及ES6引入的块级作用域。作用域决定了变量的可见性。作用域链则是在查找变量时,从当前作用域逐级向上查找直到全局作用域的过程。块级作用域解决了内存变量覆盖和循环变量泄露等问题。

1414





