Javascript的预解析
浏览器不是直接运行JS的,是调用js引擎运行js.
js引擎运行js分为两个步骤:
1.预解析 :js引擎会把js里面所有的var,以及所有的function提升到当前作用域的最前面
2.代码执行 :按照代码的书写顺序从上往下执行
预解析:
变量预解析--变量提升,就是把所有的变量声明提升到当前的作用域的最前面,不提升赋值操作
函数预解析--函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数.
尤其注意 两种函数声明方式在预解析中的不同
# 两种不同的函数声明方式
<script>
// 函数的2中声明方式
// 1. 利用函数关键字自定义函数(命名函数)
function fn() {
}
fn();
// 2. 函数表达式(匿名函数)
// var 变量名 = function() {};
var fun = function(aru) {
console.log('我是函数表达式');
console.log(aru);
}
fun('老师');
// (1) fun是变量名 不是函数名
// (2) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数
// (3) 函数表达式也可以进行传递参数
</script>
# 函数预解析
<script>
// 1问
console.log(num);
// 2问
console.log(num); // undefined 坑 1
var num = 10;
// 相当于执行了以下代码
// var num;
// console.log(num);
// num = 10;
// 3问
function fn() {
console.log(11);
}
fn();
// 4问
fun(); // 报错 坑2
var fun = function() {
console.log(22);
}
// 函数表达式 调用必须写在函数表达式的下面
// 相当于执行了以下代码
// var fun; 变量提升,因为此时是变量代表函数
// fun();
// fun = function() {
// console.log(22);
// }
// 1. 我们js引擎运行js 分为两步: 预解析 代码执行
// (1). 预解析 js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面
// (2). 代码执行 按照代码书写的顺序从上往下执行
// 2. 预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
// (1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
// (2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
</script>

浙公网安备 33010602011771号