关于预解析
在js中,预解析的过程:
首先将变量申明var以及函数function提升到作用域的最前面,需要注意的是并不提升赋值
然后将其他代码以此罗列,如同一下案例
案例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()
//输出undefined
案例2
var num = 10
function fn() {
console.log(num)
var num = 20
console.log(num)
}
fn()
//预解析代码等同于
var num
function fn() {
var num
console.log(num)
num = 20
console.log(num)
}
num = 10
fn()
//输出为undefined 20
注意如果是定义申明的函数则会将申明的变量提前,而非函数体
案例3
f1()
console.log(c)
console.log(b)
console.log(a)
function f1() {
var a = b = c = 77
console.log(a)
console.log(b)
console.log(c)
}
//预解析代码如下
function f1() {
var a = 77
b = c = 77
console.log(a)
console.log(b)
console.log(c)
}
f1()
console.log(c)
console.log(b)
console.log(a)
//输出前五个为77,最后一个a报错