<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<!--
js 单线程 解释性语言
js执行三部曲:
1.语法分析: 有没有语法错误
2.预编译: 预编译发生在函数执行的前一刻
函数声明整体提升
变量 声明提升
1.imply global 暗示全局变量 :即任何变量,
如果变量未经声明就赋值,此变量就为全局对象(window)所有 window是全局的域
2.一切声明的全局变量,全是window的属性
## 预编译四部曲
1.创建AO对象:(Activation Object)(执行期上下文)
AO{
}
2.找形参和声明变量,将变量和形参作为AO属性名,值为undefined
AO {
a : undefined,
b : undefined,
}
3.将实参值和形参值统一
AO{
a : 1,
b : undefined
}
4.在函数体里面找函数声明,值赋予函数体
AO{
a : function a() {},
b : undefined,
d : function d() {}
}
3.解释执行: 按行执行
-->
<script>
// function test() {
// // b未经声明就赋值给a b是window属性
// var a = b = 123;
// }
// test();
// function test() {
// // 局部变量
// var b = 123;
// }
// test();
function fn(a) {
console.log(a); //ƒ a () {}
var a = 123;
console.log(a); //123
function a () {}
console.log(a); //123
var b = function () {}
console.log(b); //ƒ () {}
function d () {}
}
fn(1);
</script>
</body>
</html>
js代码预编译过程
最新推荐文章于 2023-12-15 10:55:24 发布