# 函数
# 普通函数
1 | h(); //可以在函数声明前调用 |
以上的就是普通函数的声明以及调用过程,可以发现,h 函数是可以在声明前被调用的,因为在 JS 解析器向执行环境加载数据时,解析器会率先读取函数声明,并使其在任何代码前可用
# 匿名函数
1 | h(); //报错, 此时h并未被赋值 |
以上就是匿名函数的声明以及调用过程,可以发现 h 函数只能在其被赋值后才能使用,按照刚刚普通函数的解释,其实此时这个函数已经被解释器所读取了,但是这个函数并没有名字,所以我们并不能直接使用,而是只能能到这个函数赋值给变量 h 之后,我们才可以通过对 h 函数的调用,来使用这个函数
# JS 代码执行顺序
JS 代码在运行时,会分为两大部分 —— 检查转载和执行阶段
- 检查装在阶段:会先检测代码的语法错误,进行变量与函数的声明
- 执行阶段:变量的赋值,函数的调用等,属于执行阶段
# 自执行函数
自执行函数模式是一种语法,可以让函数再顶以后立即被执行
这种模式本质上就是函数表达式 (命名的或者匿名的), 在创建后立即执行
自执行函数由以下几部分组成 :
- 使用函数表达式定义一个函数 (函数声明不能起作用)
- 在结尾加上一对括号,会让函数立即执行
- 将整个函数包裹在一对括号中 (只有在不将函数赋值给一个变量的时候才需要)
功能 :
- 可以封装大量的工作而不会背后遗留任何全局变量
- 定义的变量都会成为自执行函数的局部变量,不会污染全局空间
- 可以使用这种技术模仿一个私有作用域,用匿名函数作为一个 “容器”, “容器” 内部可以访问外部的变量,但是外部无法访问内部的变量
1 | //1.使用 !开头,结构清晰,不容易混乱,推荐使用; |
