js预编译(AO对象;GO对象)
复习
⼀.函数:(封装⼀段代码):⾼内聚;低耦合(重复代码);
⼆.普通的基本数据类型:
boolean            布尔类型
string                字符串类型
number              数字类型
undefined          空
null                空
引⽤数据类型:object
三.函数也是⼀个对象
js的基本数据类型什么加对象呢?
对象就是有⾃⼰的属性与⽅法(⽅法是⼀种特殊的很属性,作为函数的时候,我们称之为⽅法)
举个例⼦:
function fun(n1,n2){}
fun.length="形参的个数"
fun.name="函数名"
fun.prototype="类型名"
四.函数声明与函数表达式
函数声明:function fun(){}
函数表达式:var fun1=function(){}
五.js的特点(在JS中有且只有⼀种情况不声明,type.of)
(1).弱类型
(2).解释型
(3).逐⾏执⾏
(4).变量声明提前,函数声明整体提前
六.js的执⾏过程
(1).语法检测
(2).预编译
(3).逐⾏执⾏
七.在函数中有⼀些看不到的属性[[scope]] (作⽤域)
作⽤域:(1):全局作⽤域
(2):函数作⽤域(局部作⽤域)
⼋.JS预编译——全局(在逐⾏执⾏;语法检测之前)(GO)
var a
function fun(){
}
function abc(){
}
function a(){
}
console.log(a);
var a = 100;
console.log(a);
}
(1):会⽣成⼀个对象(GO),这个对象封装的就是作⽤域,称为GO(global  object)。当全部挂载完成之后,然后代码在去逐⾏执⾏
GO={
}
(2):分析变量声明(var)——变量作为GO对象的属性名,值为undefined
GO={
a:undefined;
}
(3):分析函数声明(function)——函数名作为GO对象的属性名,值为函数体(如果遇到
同名,直接覆盖)
GO={
a:undefined,
fun:function fun(){},
abc:function abc(){}
}
(4):当⾛到某⼀⾏的时候;a产⽣了⼀次赋值;此时GO对象变成了:
GO={
a:100,
fun:function fun(){}
abc:function;
}
(5):逐⾏执⾏(看着GO对象⾥⾯的执⾏)
九.AO(活动对象)
var num = 100;
function fun(num){
console.log(num);
}
fun(5);
九.AO
什么是AO:是函数执⾏前的⼀瞬间,⽣成⼀个AO对象(在函数执⾏前的⼀瞬间会⽣成⾃⼰的AO,如果函数执⾏2次,⽣成了两次AO,这两次的AO是没有任何关联)
(1):执⾏前的⼀瞬间,会⽣成⼀个AO(action object)对象
(2).分析参数,形参作为AO对象的属性名,实参作为AO对象的属性值
(3).分析var变量声明,变量名作为AO对象的属性名,值为undefined,如果遇到同名的,不去做任何改变
(4).分析函数声明,函数名作为AO对象的属性名,值为函数体,如果遇到同名的,直接覆
1.分析GO
1.1⽣成⾃⼰的GO对象
GO = {}
1.2  var
GO = {
num : undefined
}
1.3  函数声明
GO = {
num : undefined
fun : function
}
2.逐⾏执⾏
此时发⽣了⼀次赋值
GO = {
num : 100
fun : function
}
⾛到第22⾏函数fun调⽤
1.调⽤前的⼀瞬间⽣成fun.AO对象                AO = {}
2.分析参数
AO = {
num : 5
}
3.分析变量声明没有略过
4.分析函数声明没有略过
AO = {
num : 5
}
开始逐⾏执⾏

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。