复习

一.函数:(封装一段代码):高内聚;低耦合(重复代码);

二.普通的基本数据类型:

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
                 }
             开始逐行执行