细说JavaScript中的预解析

概述

JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码时候分为两步:预解析和代码执行

  1. 我们js引擎运行js 分为两步: 预解析和 代码执行
    (1) 预解析:js引擎会把js里面所有的 var 还有 function提升到当前作用域的最前面
    (2) 代码执行:按照代码书写的顺序从上往下执行
  2. 预解析分为变量预解析(变量提升)和函数预解析(函数提升)
    (1)变量提升:就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作
    (2)函数提升:就是把所有的函数声明提升到当前作用域的最前面,不调用函数
  3. 函数表达式调用必须写在函数表达式的下面

案例

1、结果是多少?

//案例1
var num = 10;
fun();

function fun (){
    
    
	console.log(num);
	var num = 20;
}
//相当于执行了以下的操作
var num;
function fun (){
    
    
	var num;
	console.log(num);
	num = 20;
}
num = 10;
fun();

2、结果是多少?

var num = 10;
function fun (){
    
    
	console.log(num);
	var num = 20;
	console.log(num);
}
fun();
//相当于以下代码
var num;
function fun (){
    
    
      var num 
	console.log(num);
	 num = 20;
	console.log(num);
}
num = 10;
fun();

3、结果是多少?

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;
    a = b = c = 9;
	//相当于 var a=9; b=9; c=9;    b和c直接赋值前面 没有var声明 当全局变量看
	
console.log(a); //9
console.log(b); //9
console.log(c); //9
}
f1();
console.log(c); //9
console.log(b); //9
console.log(a); //打印报错 函数中的 var a 为局部变量无法打印

猜你喜欢

转载自blog.csdn.net/weixin_45054614/article/details/107752415