标签:function 函数 AO js 编译 理解 声明 undefined
什么是预编译呢
在函数(JS)执行的前一刻,会创建一个叫做执行期上下文的(AO)对象这个创建执行期上下文的过程叫做预编译
预编译发生在函数执行的前一刻
在初期我们知道 这只是比较浅的
函数声明整体提升 会把函数声明提到最上边
变量 声明提升 但是赋值没有被提升
预编译的过程(四部曲)
1、创建AO对象
创建AO对象(Activation Object){
执行期上下文
}
2、找形参和变量声明 将变量和形参作为AO属性名 值为undefined
AO{
这是第二步
a:undefined, 因为变量名和形参名一样 所以只写一个就好
b:undefined,
第三步
接下来将参数传进去 将实参值和形参统一
a:1,
b:undefined
第四步 在函数体里面找函数声明 值赋予函数体
a:function a(){},
b:undefined,
d:function d(){},
}
3、将实参值和形参统一
4、在函数体里面找函数声明 值赋予函数体
全局的预编译和函数内的一样
只是全局生成了一个GO对象
<script>
function fn(a){
console.log(a); //ƒ a(){}
// 这个打印的是 函数声明
var a = 123;
console.log(a); //123
// 这个打印的是变量a
function a(){}
console.log(a); // 123
// 这个打印的是变量a
var b = function (){}
console.log(b); //function(){}
// 这个打印的是 函数声明b
function d(){}
}
fn(1)
// 预编译发生在函数执行的前一刻
</script>
解题步骤在上面
标签:function,函数,AO,js,编译,理解,声明,undefined 来源: https://blog.csdn.net/qq_44936905/article/details/99056808
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。