函数的定义阶段
1、开空间
2、把这个空间的地址给到函数的名字
3、把代码放到这个空间里面(当成字符串放进去 不会解析变量)
函数的执行阶段
1、通过函数的名字(地址)找到这个函数空间
2、形参赋值
3、函数内部预解析
4、函数内部代码执行
全局预解析
1、全局声明一个变量 num 可用
2、全局声明一个变量 fn 可用 并且是一个函数的地址
代码执行
1、num = 100
2、fn()
- 通过 fn 这个地址 找到函数空间
- 形参赋值
a = 10
- 函数内部预解析
1、函数内部声明一个 变量 a 可用
- 函数内部代码执行
1、a = 100 把函数内部的这个 a 赋值为 100
2、console.log(a)
// var num = 100
// function fn (a){
// var a = num
// console.log(a)
// }
// fn(10)
函数调用
1、通过 fn 找到这个函数空间
2、形参赋值
3、函数内部预解析
- 1、函数内部声明一个变量 a 可用
- 2、函数内部声明一个变量 a 可用 并且是一个函数的地址
- 3、函数内部声明一个变量 a 可用
4、函数内部代码执行
- 1、a() => 我是 函数内部 a 函数(声明式)
- 2、a = 10 给函数内部的 a 赋值为 10
- 3、a() 10() => 报错 a is not a function
function fn() {
a()
var a = 10
f