# JavaScript 预解析

  • # JavaScript 预解析已关闭评论
  • 169 次浏览
  • A+
所属分类:Web前端
摘要

js引擎运行js代码,分为两步:预解析、代码执行
1.预解析:js引擎会把js里面所有的var还有function提升到当前作用域的最前面
2.代码执行:按照代码书写的顺序从上往下执行


JavaScript 预解析

1.预解析

js引擎运行js代码,分为两步:预解析、代码执行
1.预解析:js引擎会把js里面所有的var还有function提升到当前作用域的最前面
2.代码执行:按照代码书写的顺序从上往下执行

2.变量预解析(变量提升)和函数预解析(函数提升)

1.变量提升:就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作
2.函数提升:就是把所有的函数声明提升到当前作用域的最前面,不调用函数

3.案例分析

//问题1 console.log(num);  //问题2 console.log(num); // nudefined  坑1 var num = 10; //相当于执行了以下代码: var num; console.log(num); num = 10;  //问题3 fn(); function fn(){ 	console.log(11); }  //问题4 fun(); // 报错 坑2 var fun = function(){ 	console.log(22); } //函数表达式调用必须写在函数表达式的下面 //相当于执行了以下代码: var fun; fun(); fun = function(){ 	console.log(22); }   
//案例 f1(); console.log(c); console.log(b); console.log(a); function f1(){ 	var a = b = c = 9; 	console.log(a); 	console.log(b); 	console.log(c); } //相当执行了以下代码: function f1(){ 	var a = b = c = 9; 	//相当于 var a = 9; b = 9; c = 9;  b和c直接赋值,没有var声明,当全局变量看 	//集体声明:var a = 9, b = 9, c = 9; 	console.log(a); // 结果是 9  	console.log(b);// 结果是 9  	console.log(c);// 结果是 9  } f1(); console.log(c);// 结果是 9  console.log(b);// 结果是 9  console.log(a);// 结果是 undefined