一、作用域
作用域:变量的生效范围。
二、全局作用域
范围:整个script标签或整个js文件。
<script>
let a = 10;//a为全局变量,生效范围为整个script标签。
</script>
三、局部作用域
范围:函数内部。
<script>
function fn() {
let a = 20;//a为局部变量,生效范围为fn()这个函数内部。
}
</script>
四、块级作用域
范围:循环或判断语句内部。
for (let i = 10; i <= 100; i++) {
console.log(i);//i为块级变量
}
if (true) {
let a = 100;//a为块级变量
}
五、变量特殊情况
1.函数内部变量没有声明,会默认当成全局变量使用。
<script>
function fn() {
a = 20;//a为全局变量
}
</script>
2.函数内部形参默认是局部变量。
<script>
function fn(x,y) {
a = 20;//x,y为局部变量
}
</script>
六、作用域链
变量访问原则:逐级查找-就近原则。
作用域链:当你的局部作用域进行层层嵌套, 形成相互依赖的结构时, 我们称之为作用域链。
- 简单来说,作用域链就是变量在作用域中的查找过程。
let a = 10
function fn1() {
let b = 20
function fn2() {
let a = 30
function fn3() {
let b = 40
function fn4() {
console.log(a, b);//30,40
}
fn4()
}
fn3()
}
fn2()
}
fn1()