预解析的一个表现就是 声明式函数再定义前可以被调用
预解析是什么?
JS 在执行代码的时候, 会有一个 所谓的 解析阶段
解析阶段, 做了一件事, 就是 函数提升, 就是将 声明式 函数的定义, 提升到当前 作用域的最顶端
作用域的最顶端:暂时理解为 当前页面的最开始的位置
fn()
function fn() {
console.log('我是 fn 函数, 我被调用了')
}
一道面试题: 函数的预解析是什么? 正常书写的 代码
fn()
function fn() {
console.log('我是 fn 函数, 我被调用了')
}
浏览器会对我们的 JS 代码, 做一个 预解析, 预解析的时候, 会将函数提升到 当前作用域的最顶端, (暂时理解为 当前页面最开始的位置)
fn() -> 这行代码是函数调用, 所以不需要提升
function fn() { -> 这是一个声明式定义的函数, 所以需要提升
console.log('我是 fn 函数, 我被调用了') }
预解析之后的代码长什么样(执行顺序)?
function fn() {
console.log('我是 fn 函数, 我被调用了')
}
fn() // 所以此时调用的时候, 因为 fn 函数已经定义完成了, 所以这里能够正常执行函数