JavaScript预解析
预解析
一、什么是预解析
预:在所有js代码执行前
解析:对整篇js代码进行通读并解释(浏览器在解析)
二、解析了什么内容
var 声明的变量
var num
声明式函数(不是赋值式函数)
function fn( ) { }
三、怎么解析的
var 声明的变量
在所有 js 代码执行前,先把变量声明好再开始执行代码
案例1
var num
= 100
案例2
console
.log(num
)
var num
= 100
声明式函数
在所有 js 代码执行前,先把函数名声明好,并且给这个函数赋值为一个函数再开始执行代码
案例1
function fn() {}
案例2
fn()
function fn() {
console
.log('我是 fn 函数')
}
赋值式函数的预解析
赋值式函数不会按照声明式函数的预解析规则进行
而是按照 var 的预解析规则进行
var fn = function ( ) { }
fn()
var fn = function () {
console
.log('我是 fn 函数')
}
预解析的无节操
不管 if 条件是不是成立,写在里面的代码都会进行预解析
只是条件不成立的时候,不会执行 { } 里面的赋值操作
console
.log(age
)
if (2 > 1) {
var age
= 18
}
console
.log(age
)
console
.log(age
)
if (2 < 1) {
var age
= 18
}
console
.log(age
)
当在函数内部的时候, return 后面的代码虽然不会执行
但是会进行预解析
function fn() {
console
.log(num
)
return
var num
= 100
}
fn()
预解析小案列
var a
= b
a
= 10
b
= 20
console
.log(a
)
console
.log(b
)
预解析的优先级
当你定义一个变量和一个声明式函数的时候
如果变量名和函数名充满,在进行预解析的时候,以函数为准
console
.log(num
)
var num
= 100
console
.log(num
)
function num() {
console
.log('我是一个函数')
}
console
.log(num
)
console
.log(num
)
num(100)
var num
= 100
console
.log(num
)
num(200)
function num(a
) {
console
.log(a
)
console
.log('我是一个函数')
}
console
.log(num
)