1.作用域链
<script>
// 什么是作用域链: 变量的查找机制
// 大白话: 里面的函数能够看见外面的变量 ---外面看不见里面
// 官方: 变量查找的时候: 从内往外, 就近查找
// 全局变量a
let a = 1; // 全局变量 任何作用域都可以看见
function fn() {
// 局部变量 a ---- 在局部作用域里面声明的变量外面无法访问
let a = 10
function g() {
a = 20 // 这个a 是17行 还是 14行的a
console.log(a);
}
g()
}
// 问题: a是全局变量还是局部变量, a的值等于多少?
fn()
</script>
1. 局部作用域: 函数作用域 + 块级作用域
2. 全局作用域变量访问机制: 在任何局部作用域里面都可以看见
3. 局部作用域变量的访问机制:在局部作用域里面定义的变量外面看不见
4. 作用域链: 什么是作用域链: 变量的查找机制
具体是什么机制: 从内向外, 就近查找
闭包的作用
<script>
// 面试会问
// 什么是闭包: 闭包就是函数, 内层函数 + 访问了外层函数的变量
// 闭包的作用: 可以让函数外面访问函数内部的变量 (不能直接访问,需要通过函数调用的形式)
// 闭包的应用: 数据私有化
// 闭包的问题: 内存泄露 --- 一直保存在内存里面,不被销毁
function fn() {
let num = 10 // 只能在函数里面使用,外面看不到---- 数据私有化
return function g() {
num++
console.log(num);
}
}
const res = fn() // res就是一个函数
res() // 11 通过闭包,我们可以用函数调用的形式,去访问函数内部的变量
res() // 12
res() // 13
// num