JavaScript预编译(执行期上下文)总结
上代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function test(a,b){
console.log(a);
var a = 'demo';
console.log(a);
function a(){}
console.log(a);
var a = function (){}
console.log(a);
console.log(b)
var b = 1;
}
test(1);
</script>
</body>
</html>
执行结果:
预编译发生在函数执行之前
。这句话很重要,函数执行之前也就是在这段程序开始之前,浏览器对马上要执行的函数进行预编译!! 预编译四部曲
以上一个问题为例。以下过程都是在系统内部完成的
var AO = {
}
这里的形参首先出现的是a,b。变量为a,b。
var AO = {
a = undefined;
b = undefined;
}
这里的实参只有一个是1。
var AO = {
a =1;
b = undefined;
}
这里只有第十三行是函数声明,第十五行不是。
var AO = {
a = function a(){};
b = undefined;
}
这样就完美解释了代码是怎样的执行循序