一、预解析:
JavaScript引擎在对JavaScript代码进行解释执行之前,会对JavaScript代码进行预解析,在预解析阶段,会将以关键字var和function开头的语句块提前进行处理
二、预解析的情况:
- 1、函数的提升
- 2、变量的提升,只是声明的提升,赋值不会提升
- 3、函数声明的函数名与变量声明的变量名重复,函数提升,变量不提升
- 4、函数表达式不会提升
- 5、提升不能超出作用域的范围
// 1、
demo1()
function demo1() {
console.log('我是函数的声明!')
}
/*
预解析:
function demo1() {
console.log('我是函数的声明!')
}
demo1()
*/
// 2、
console.log(num) //undefined
var num = 100
/*
预解析:
var num
console.log(num);
num = 100
*/
// 3、函数声明的函数名与变量声明的变量名重复,正常解析下,变量覆盖函数
// demo1()
console.log(demo1)
var demo1 = 12
function demo1() {
console.log('我是demo1')
}
/*
预解析后:
function demo1() {
console.log('我是demo1')
}
console.log(demo1)
var demo1 = 12
*/
// 4、
fn1()
var fn1 = function () {
console.log('我是fn1')
}
//报错
// 5、
// var str
console.log(str) //报错
function demo2() {
// var str
console.log(str)
var str = '字符串'
/*
预解析后
var str
console.log(str)
str = '字符串'
*/
}
demo2()