作用域

52 阅读2分钟
  1. 变量使用使用区间的, 变量不是说声明之后在哪里都可以用, 他有一个使用的范围, 我们把这个范围叫做 作用域

         *

         *  作用域分为两种

         *      1. 全局作用域

         *              JS 给我们提供了一个叫做 window 的全局作用域, 可以理解为 整个 script 标签内的作用域, 就是全局作用域

         *              全局变量都会挂载到 window 对象上

         *      2. 局部作用域       小预告: 后续会学习新的作用域 (块级作用域)

         *              在 JS 中, 有 且只有 函数能够创建 局部作用域(函数作用域), 局部作用域开始和结束位置, 就是函数代码段的开始和结束位置

         *              在 局部作用域(函数作用域)内 声明的变量叫做局部变量

         *              局部变量 不会挂载到 window 对象上

什么是作用域链

         *      * 在查找变量时, 会先在当前作用域内查找, 找到就用, 没找到去上层查找, 一直会查找到顶层作用域(全局---window)

         *      * 然后在查找过程中, 我们把逐层向上的一层一层查找 所构成的一个链条 叫做作用域链(实际是没有作用域链的,这是一个纯概念性的东西)

         *

         *      变量的访问规则

         *          变量访问会 先在当前作用域内查找, 找到拿来直接用, 如果没有找到, 会去上层作用域查找, 找到直接用

         *              如果上层作用域没找到, 会继续去上层作用域  的 上层作用域内查找, 找到直接用, 没找到会继续往上

         *              如果找到了全局作用域内 还是没有变量, 那么就会报错 num is not defined

         *      变量的赋值规则

         *          变量赋值会 现在当前作用域内查找, 找到直接拿来赋值, 如果没找到, 会去上层作用域查找, 找到直接赋值

         *          如果上层作用域也没找到, 会继续去上层作用域 的 上层作用域内查找, 找到直接赋值, 没找到继续往上

         *          如果找到了全局作用域内, 还是没有找到变量, 那么会直接将变量定义在当前作用域内(全局作用域)然后赋值

         *

         * 重点:    作用域链 只会向上查找, 不会向下