javaScript预解析

本文详细介绍了JavaScript中的预解析机制,包括变量预解析和函数预解析,通过实例解析了变量提升和函数提升的过程,并展示了多个案例来帮助理解变量和函数在不同情况下的作用域和执行顺序。同时,强调了预解析对于JavaScript代码执行的影响和重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

概述

变量预解析和函数与解析

变量预解析(变量提升)

函数预解析

预解析案例


1问:

console.log(num); // 结果是多少?

结果: 

2问:

console.log(num); // 结果是多少?
var sum = 10;

结果:

3问:

fu();
function fu(){
    console.log('打印');
}

结果:

4问:

fn();
var fn = function (){
    console.log('想不到吧');
}

结果:

概述

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

预解析:在当前作用域下,JS代码执行之前,浏览器会默认把带有var和function声明的变量在内存中进行提前声明或者定义。

代码执行:从上而下执行代码

变量预解析和函数与解析

变量预解析(变量提升)

预解析也叫变量、函数提升

变量提升:变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。

console.log(num);  // 结果是多少?
var num = 10;      // ?

这段代码变量提升后为:

var num;
console.log(num);  
num = 10;      

结果是undefined

函数预解析

函数提升:函数的声明会被提升到当前作用域的最上面,但是不会调用函数。

fn();
function fn() {
    console.log('打印');
}

这段代码函数提升后为:

function fn() {
    console.log('打印');
}

fn();

结果为:打印

预解析案例

// 案例1
var num = 10;
fun();
function fun() {
  console.log(num);
  var num = 20;
}

// 预解析后:
var num;
function fun() {
   var num;
   console.log(num); // undefined
   num = 20; 
}
num = 10;
fun();
// 案例2
var num = 10;
function fn(){
    console.log(num);
    var num = 20;
    console.log(num);
} 
fn();

// 预解析后
var num;
function fn(){
    var sun;
    console.log(num); // undefined
    num = 20;
    console.log(num); // 20
} 
num = 10;
fn();
// 案例3
var a = 18;
f1();
function f1() {
  var b = 9;
  console.log(a);
  console.log(b);
  var a = '123';
}

// 预解析后
var a;
function f1() {
  var b;
  var a;
  b = 9;
  console.log(a); // undefined
  console.log(b); // 9
  a = '123';
  
}
a = 18;
f1();
// 案例4
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声明,属于全局变量
  console.log(a); // 9
  console.log(b); // 9
  console.log(c); // 9
}
f1();
console.log(c); // 9
console.log(b); // 9
console.log(a); // 报错 因为a属于局部变量,外部不能访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值