作用域
变量使用区间,变量不是说声明变量之后在哪里都可以使用,他有使用范围叫做作用域
作用域分为两种
- 全局作用域
js给我们提供了一个叫做window的全局作用域,可以理解为整个script标签内的作用域,就是全局作用域
全局变量会挂载到window对象上 - 局部作用域
在js中有且只有函数能够创建局部作用域
在局部作用域(函数作用域)内,声明的变量叫做局部变量
局部变量不会挂载到window对象上
var num = 100
function fn() {
var num = 10000
console.log(num);
}
fn()
console.log(num);
作用域链
定义
在查找变量时,会先在当前作用域内查找,找到就用,没找到去上层查找,一直会查找到顶层作用域(全局——window)
在查找过程中,我们把逐层向上的一层一层查找,所构成的一个链条 叫做作用域链(实际上没有作用域链)
变量的访问规则
变量访问会 先 在当前作用域内查找,找到拿来直接用,如果没有找到,会去上层作用域查找,找到拿来直接用,一直往上层作用域找,直到找到全局作用域,还没有变量,就会报错。
变量的赋值规则
变量赋值会 先 在当前作用域内查找,找到直接赋值,如果没有找到,会去上层作用域查找,找到直接赋值,如果上层作用域内没找到,一直往上层作用域找,直到找到全局作用域,还没有找到变量,那么会直接将变量定义在当前作用域(全局作用域)内。<赋值了 没定义>
*重点: 作用域链:只会向上查找,不会向下
function fn() {
function fn1() {
a = 1000
}
fn1()
}
fn()
console.log(a);