JS 预解析机制 什么是预解析?

24 篇文章 0 订阅

一、概念

作用域: 域,指的是一个空间、范围、区域,作用指的是在域内可进行读写操作。一个变量的作用域是程序源代码中定义的这个变量的区域。
在ES5中,只存在全局和函数级作用域,在ES6中,引入了块级作用域,js的预解析机制大概分为两个过程:预解析和自上而下逐行解读。


预解析: js解析器会先把var定义的变量、function、参数等一些东西存储进仓库里面(内存)。变量var在正式运行之前,都赋值为undefined,function函数在运行之前,就是整个函数块

预解析结束之后,就是逐行解读

JS解析过程:1、预解析。2、逐行解读代码,下面看几个例子。

例子一:

var有预解析,let、const没有预解析

console.log('我是a', a)
console.log('我是b', b)
console.log('我是c', c)

var a = 123
let b = 456
const c = 789

在这里插入图片描述

这里报错的问题,他是一个警告,在初始化之前不能访问

为什么会输出一个undefined呢?
因为预解析的机制就是,先放到全局的最顶端按先声明后赋值

相当于

var a 
console.log(a)
a = 123

例子二:

console.log(a);
var a = 1;

执行结果:undefined

console.log(a);
a = 1;

执行结果:Uncaught ReferenceError: a is not defined

未捕获的ReferenceError: a未定义

总结:第一种结果是预编译使 a=undefined,第二种结果是直接报错。



例子三:

function的优先级要高于var

var fn = 123
function fn() {
  console.log(123)
}
console.log('结果是', fn)
结果是:123

在这里插入图片描述
解析的流程

1.先声明的 function fn()
2.在声明  var fn 把 function  fn的值修改了
3.所以结果是123
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值