每个函数都会默认创建一个作用域
例子
function fn(){let a = 1}console.log(a)//a不存在
a 只在函数作用域里生效,在外面访问不到
全局变量和局部变量
- 在顶级作用域声明的变量是全局变量
- window 的属性是全局变量
-
函数可嵌套,作用域也可嵌套
function f1(){let a = 1function f2(){let a = 2console.log(a)}console.log(a)a = 3f2()}f1()
如果多个作用域有同名变量a
那么查找 a 的声明时,就向上取最近的作用域
简称「就近原则」
查找 a 的过程与函数执行无关
但 a 的值与函数执行有关function f1(){let a = 1function f2(){let a = 2function f3(){console.log(a)}a = 22f3()}console.log(a)a = 100f2()}f1()
