做网站收获了什么,网站开发的工作流程,接单网app下载安装,网站建设的几大要素1.预编译
预编译是上下文创建之后, js代码执行前的一段时期, 在这个时期, 会对js代码进行预处理。
2.全局预编译
全局上下文创建后#xff0c;会生成变量对象VO#xff1a;var变量-》函数-》同名函数覆盖变量名
VO首先寻找变量声明#xff0c;将var声明的变量作为VO对象…1.预编译
预编译是上下文创建之后, js代码执行前的一段时期, 在这个时期, 会对js代码进行预处理。
2.全局预编译
全局上下文创建后会生成变量对象VOvar变量-》函数-》同名函数覆盖变量名
VO首先寻找变量声明将var声明的变量作为VO对象的属性名值为undefined。然后寻找函数声明属性值为函数本身如果函数名与变量名冲突函数声明会将变量声明覆盖。
function a(b, c) {console.log(b); var b 0console.log(b); var b function () {console.log(bbbb)} console.log(c); console.log(b);
}
a(1)
全局预编译分析 // 第一步寻找变量声明var将变量名作为属性名将值设置为undefinedVO {a: undefined}// 第二步寻找函数声明属性值为函数本身// 第三步函数名和变量名冲突函数声明会覆盖变量声明VO {a: undefined- function a() { }}
//执行结果 function a() { }, 100
3.函数预编译
函数上下文创建后会生成变量对象AO函数预编译 var变量-》形参-》实参赋值给形参-》函数-》同名函数覆盖变量声明
寻找变量声明, 变量名作为AO对象的属性名, 属性值置为 undefined寻找形参, 形参名作为AO对象的属性名, 属性值置为 undefined将实参的值赋予形参, 即替换 AO对象中形参的属性值寻找函数声明, 函数名作为AO对象的属性名, 属性值为函数本身如果函数名与变量名冲突, 函数声明会将变量声明覆盖
function a(b, c) {console.log(b); var b 0console.log(b); var b function () {console.log(bbbb)} console.log(c); console.log(b);
}
a(1)
函数预编译解析 // 第一步寻找函数中的变量声明将变量名作为属性名将值设置为undefinedAO : {b: undefined,}// 第二步寻找形参AO : {b: undefined,c: undefined,}// 第三步将实参传给形参(b变成了1)AO : {b: undefined - 1,c: undefined,}// 第四步寻找函数声明此处没有// 第五步如果函数名与变量名冲突, 函数声明会将变量声明覆盖此处没有// 执行结果1 ,0,(将函数赋值给b),undefined, b的函数体
4.预编译面试题 // 面试题function fn(a, c) {console.log(a)var a 123console.log(a)console.log(c)function a() { }if (false) {var d 678}console.log(d)console.log(b)var b function () { }console.log(b)function c() { }console.log(c)}fn(1, 2)
预编译解析 // 函数预编译 var变量-》形参-》实参赋值给形参-》函数-》同名函数覆盖变量声明AO:{a: undefined-1-funA,d: undefined,b: undefined-》funB,c: 2-funC}// 执行结果funA123funCundefinedundefinedfunB,funC