复习
一.函数:(封装一段代码):高内聚;低耦合(重复代码);
二.普通的基本数据类型:
boolean 布尔类型
string 字符串类型
number 数字类型
undefined 空
null 空
引用数据类型:object
三.函数也是一个对象
什么加对象呢?
对象就是有自己的属性与方法(方法是一种特殊的很属性,作为函数的时候,我们称之为方法)
举个例子:
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 } 开始逐行执行