作用域
作用域就是变量的有效范围。 在一定的空间里可以对数据进行读写操作,这个空间就是数据的作用域。
-
全局作用域(Script): 最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的。
-
局部作用域(Local): 局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的,最常见的例如函数内部。在 ES6 之前,只有函数可以划分变量的作用域,所以 在函数的外面无法访问函数内的变量。
-
块级作用域(Block):凡是代码块就可以划分变量的作用域,这种作用域的规则就叫块级作用域。
//全局变量
let num = 10
//fn本身还是全局变量
function fn(a,b) {
//函数 : 局部作用域
let age = 20
console.log(age)
}
fn(10,20)
//块级作用域: 分支 + 循环
for (let i = 1; i <= 5; i++) {
console.log(i)
}
for(let i = 1;i<=10;i++){
console.log(i)
}
作用域链
- 在子级作用域中依次向上级作用域中链式查找变量,称之为作用域链;如果全局都没有则会报错;
- 作用域链的最顶端是变量的当前执行环境,依次向下查找变量,最底部是window
//全局作用域 0级
let num = 10
function fn(){
//局部作用域 1级
// let num = 20
console.log(num)//20
function fn1(){
//2级
// let num = 30
console.log(num)//30
}
fn1()
}
console.log(num)//10
fn()