一.作用域
一:全局作用域:不在函数内部作用域和块级内部作用域外的作用域
二:函数作用域:在函数内部的作用域
三:块级作用域:在花括号{}内部的作用域
注意:①对象的{}不属于块级作用域,像for(){},if(){},else{},try{},cath(){}等等的花括号才是块级作用域
②对象的{}的作用域是什么作用域取决于对象所处的作用域,比如对象在全局作域 下定义的,那么对象的{}的作用域就是全局作用域
<script>
//全局作用域
function fn() {
// 函数作用域
}
{
// 块级作用域
}
</script>
二.作业域链
只要是代码,就至少有一个作用域
如果作用域还有作用域,那么在这个作用域中就又可以诞生一个作用域
根据在内部作用域可以访问外部作用域变量的这种机制,用链式查找决定哪些数据能被内部作用域访问,就称作作用域链
例子1:
// 作用域链: 内部作用域访问外部作用域的变量,采取的是链式查找的方式来决定取哪个值,这种结构我们称为作用域链
<script>
let num = 10;
function fn() { //外部函数
let num = 20;
return function fun() { //内部函数
console.log(num);
}
}
const funn = fn()
funn() // 20 ,一级一级访问
</script>
例子2:
<script>
let num = 10;
function fn() { //外部函数
return function fun() { //内部函数
console.log(num);
}
}
const funn = fn()
funn() // 10 ,一级一级访问
</script>