1. 作用域
- 变量(变量/函数名)的生效使用范围
2. 作用域的分类
- 全局作用域(window):一个 html 页面打开就是一个全局作用域
- 私有作用域:⚠️只有函数生成私有作用域⚠️
- 只要书写了一个函数,就会生成一个私有作用域
- 一旦书写,就会一直生效
- 书写在哪一个作用域内的函数,就是哪一个作用域的子级作用域
3. 变量的三种机制
1. 变量定义机制
- 定义在哪一个作用域下的变量,就是哪一个作用域的私有变量
- 只能在当前作用域以及后代作用域内使用
2. 变量访问机制
- 当需要访问某一个变量的值的时候
- 首先在自己作用域内查找,如果有直接使用并停止查找,如果没有,自动去到父级作用域查找,如果有自动使用并停止
- 依次类推直到全局作用域(window)都没有,就会报错,xxx is not defined
3. 变量赋值机制
- 当需要给某个变量赋值的时候
- 首先在自己作用域内查找,如果有直接赋值并停止查找,如果没有就自动到父级作用域找,如果有直接赋值并停止
- 依次类推直到全局作用域(window)都没有
- 会把这个变量定义为全局变量,再进行赋值
4. 变量的三种形态
1. 什么是变量定义?
- 必须是要有定义变量的关键字 var / function / ...
- 或者是函数的形参
var num
var num = 100
function fn() {}
function fn(a,b) {}
2. 什么是变量访问
- 需要拿到某一个变量所保存的值来使用(运算,输出,...)
num++
fn()
console.log(aaa)
3. 什么是变量赋值
- 给某一个变量进行赋值操作
- 有赋值符号,或者函数的实参
num += 10 等价于 num = num + 10
fn(10, 20)