前端面试经典题型——预解析
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) */
JavaScript引擎在执行代码时会先进行预解析,将`var`变量和函数声明提升到其作用域顶部。变量提升只提升声明,不提升赋值,而函数提升则整个函数声明都会被提升。预解析导致的变量和函数的行为在不同场景下有不同的表现,例如在函数内部的变量会被局部作用域覆盖全局变量。
3238

被折叠的 条评论
为什么被折叠?



