共计 930 个字符,预计需要花费 3 分钟才能阅读完成。
预解析
JavaScript 代码是由浏览器中的 JavaScript 解释器来执行的,JavaScript 解释器在运行 JavaScript 代码的时候分为两步:预解析和代码执行
js引擎会把js里面所有的
var
还有function
提升到当前作用域的最前面,然后按照代码书写的顺序自上而下执行
let
不会预解析
变量预解析(变量提升)
变量提升,就是把所有的变量声明提升到当前作用域最前面,不提升赋值操作
函数预解析(函数提升)
函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数
预解析
// var b = function() { } // 这种是函数表达式**不是函数声明**
// function c() { } // 这种是函数声明
function fn(a, c) {
console.log(a) // function a() { }
var a = 123
console.log(a) // 123
console.log(c) // function c() { }
function a() { }
if(false) {
var d = 678
}
console.log(d) // undefined
console.log(b) // undefined
var b = function() { }
console.log(b) // function () { }
function c() { }
console.log(c) // function c() { }
}
fn(1, 2)
/*
预解析
作用域(全局作用域和函数作用域)的创建阶段 预解析的阶段
预编译的时候做了那些事情
js 的变量对象,在函数作用域的创建阶段也叫做 AO 对象,访问不到供 js 引擎自己去访问的;AO 对象在函数作用域的创建阶段做了哪些事情
1. 创建了 AO 对象
2. 找形参和变量的声明
3. 实参和形参相统一
4. 找函数声明,如果函数声明的名称和变量声明名称一样的话,会覆盖变量的声明
上面代码的 AO 对象
AO: {
a: undefined 1 function a() { }
c: undefined 2 function c() { }
d: undefined 1
b: undefined 1
}
js 解释执行 逐行执行输出
function a() { }
123
function c() { }
undefined
undefined
function () { }
function c() { }
*/
正文完
发表至: 笔记
2024-05-20