JS中的作用域

85 阅读2分钟

作用域

1.1 在 JavaScript 中, 对象和函数同样也是变量。 1.2 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 1.3 JavaScript 函数作用域: 作用域在函数内修改。

作用域分为两个(现在所学的暂时为两个)
 1.全局作用域
     就是再 script 标签内部声明的变量 就是全局作用域的变量
     在 全局作用域声明的变量, 在哪里都可以使用
     浏览器在运行的时候 会给我们一个 window 对象, 我们的全局作用域 内声明的变量 全都在 window 对象中
 2. 局部(函数)作用域
     就是在 函数内部 的大括号内 这个区间叫做 函数作用域
     在函数作用内声明的变量, 只能在当前函数内部使用, 在函数外部(超过作用域了) 就无法使用
     函数作用域内声明的变量, 不会挂载到 window 对象上

作用域链

概念:在自己作用域内查找, 找不到去上层, 不会去下层, 这样一层一层的一个链条 我们叫做作用域链

变量的访问规则
     console.log(a)
     会先在自己当前作用域内查找 变量 a, 找到直接使用(打印)
         如果没有找到!!! 会向上层作用域查找, 不会向下层查找!!!
     如果 上层作用域 内也没有找到, 会继续向 上层作用域的上层作用域查找(相当于是去自己爷爷级作用域)
     一直会找到最顶层的全局作用域, 找到就是用, 找不到 就报错

变量的赋值规则
     a = 1
     会先在自己当前作用域内查找 变量a, 找到直接赋值
         如果没找到!!! 会向上层作用域查找, 不会向下层查找!!!
     如果上层作用域内也没有找到, 会继续向上层作用域的上层作用域查找(去自己的爷爷级作用域)
     一直会找到最顶层的全局作用域, 找到直接赋值, 找不到 将 变量定义为全局变量  

递归函数

递归函数
    条件1   一个函数 在内部 调用了 自身
    条件2   在合适的实际 结束调用(结束递归) 一定要有, 不然就是 死递归