1.预解析只会解析var定义变量和声名式函数提升到当前作用域的最前面
2.预解析中当var变量和声名式函数同名的时候,以声名式函数为准
console.log(fn)
var fn = 100
function fn(){
console.log('hello world')
}
3.函数调用中先给形参赋值,再进行预解析
function fn(a) {
a()
function a() {
console.log('hello world')
}
}
fn(100) // hello world
4.在分支函数中,预解析只提升var和函数名,不给函数赋值
console.log(num) // undefined
if(false){
var num = 100
}
console.log(fn) // undefined
fn() // Uncaught TypeError: fn is not a function
if (false) {
function fn() {
console.log('hello world')
}
}
5.函数内的return不会影响预解析
fn() // undefined
function fn() {
console.log(num)
return;
var num = 100
}