前端面试经典题型——预解析
1.js 引擎运行js分为两步:预解析 代码执行
(1).预解析 js引擎会把js里面所有的var还有function提升到当前作用域的最前面
(2).代码执行 按照代码书写的顺序从上往下执行
2.预解析分为 变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升 就是把所有的变量声明提升到当前作用域最前面 , 不提升赋值操作
(2)函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
console.log(num)
var num = 10//返回值为unfined
//执行顺序为:var num
// console.log(num)
// num = 10
fun()//报错
var fun = function(){
console.log(22)
}
//函数表达式 调用必须写在函数表达式的下面
//相当于执行了以下代码
/* var fun
fun()
fun = function(){
console.log(22)
} */
var num = 10
fun()
function fun(){
console.log(num)
var num = 20
}//返回值为undefined
//相当于执行了以下操作
/* var num
function fun(){
var num
console.log(num)
num = 20
}
num = 10
fun() */
var num = 10
function fn(){
console.log(num)
var num = 20
console.log(num)
}
fn()//返回值为undefined 20
//相当于
/* var num
function fn(){
var num
console.log(num)
num = 20
console.log(num)
}
fn() */
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)
console.log(b)
a = '123'
}
a = 18
f1()*/
f1()
console.log(c)
console.log(b)
console.log(a)
function f1(){
var a = b = c = 9//相当于var a = 9 b = 9 c = 9//b和c前面没有var,相当于全局变量,a为局部变量
console.log(a)
console.log(b)
console.log(c)
}
//相当于执行以下代码
/* function f1(){
var a = 9
b = 9
c = 9
console.log(a)
console.log(b)
console.log(c)
}
f1()
console.log(c)
console.log(b)
console.log(a) */