一、全局作用域
不在函数内部作用域和块级内部作用域外的作用域
二、函数作用域
在函数内部的作用域
函数作用域在函数创建时就已经确定(词法作用域)和调用位置无关
三、块级作用域
在花括号
{}
内部的作用域,对象不是
3.1、注意:
- 只要是js可执行的代码,就至少有一个作用域
- 对象的
{}
不属于块级作用域,像for(){}
,if(){}
,else{}
,try{}
,cath(){}
等等的花括号才是块级作用域- 对象的
{}
的作用域是什么作用域,取决于定义对象代码语句所处的作用域,比如对象定义在全局作域下,那么对象的{}
的作用域就是全局作用域
四、作业域链
访问变量时,自己的作用域中没有,一层一层向上寻找,直到找到全局作用域还是没找到,就宣布放弃,这种一层一层的关系,就是作用域链。
4.1、例子1
<script>
let num = 10;
function fn() { //外部函数
let num = 20;
return function fun() { //内部函数
console.log(num);
}
}
const funn = fn()
funn() // 20 ,一级一级访问
</script>
4.2、例子2
<script>
let num = 10;
function fn() { //外部函数
return function fun() { //内部函数
console.log(num);
}
}
const funn = fn()
funn() // 10 ,一级一级访问
</script>
网友评论