ITPub博客

首页 > 应用开发 > Javascript > JavaScript进阶教程日记

JavaScript进阶教程日记

原创 Javascript 作者:晨晨mak 时间:2023-12-05 11:07:25 0 删除 编辑

1. 预编译

1.1 全局对象(GO对象) window

js引擎会整合所有<script>标签中的内容, 产生window对象


全局变量: 全局对象的一个属性


全局函数: 全局对象的一个方法


1.2 局部对象AO/活动对象AO

函数被调用时产生,保存当前函数内部的执行环境。方法执行完后, 局部对象就消失


局部变量: 是局部对象的一个属性


局部函数: 是局部对象的一个方法


1.3 全局预编译

全局环境下(script标签下),js引擎的预处理方式


步骤


1. 生成GO对象(window对象)

2. 查找所有变量的声明,变量名作GO对象属性名,值为undefined


3. 查找所有函数的声明,函数名作GO对象属性名,属性值为function


同名的变量和函数,函数的优先级高


1.4 函数预编译

调用函数之前会做一个函数的预编译


步骤


        1. 调用那一刻,为函数生成一个AO对象


        2. 查找函数形参和局部变量的声明,作为AO属性名,值为undefined


        3. 实参值赋给形参


        4. 找到局部函数的声明,函数名作AO对象属性名,属性值为function


局部函数 > 实参 > 形参和局部变量


2. 作用域

2.1 全局作用域

script标签产生的区域,window对象管控的区域


全局的变量和函数浏览器关闭的时候销毁


2.2 局部作用域 function () { }

函数对象 管控区域


局部变量和函数 在函数执行完成后销毁


2.3 块级作用域 { let a = 1; }

if、for 管控的 {} 区域


let


2.4 作用域链

        内部可以访问外部


        使用数组存放,栈结构(上端进出,元素压栈进去,先产生的在下面)


        本质


                是一个数据结构,函数内部可以嵌套函数,每一次嵌套形成一个作用域,串起来就形成作用域链


                每个函数内部都的【scopes】属性,代表函数的作用域链,代表函数执行时所存在的执行环境(含每个作用域中的变量、局部函数)


                console.dir(a); //打印函数内部结构(含scopes属性)


                分别代表:




                                                        0 bAO

                                                        1 aAO

                                                        2 GO


        断点调试




2.5 变量取值原则

就近原则,当前作用域中没有 就找上一层,依次往上找,都没有就报错


3. 原型

实例成员 this添加的成员


静态成员 在构造函数本身上添加的成员,通过构造函数名访问




原型对象prototype: 构造函数的一个静态成员属性 Star.prototype


对象的原型: 对象的一个属性 ldh.__proto__


原型对象与对象的原型,指向同一个对象,都有一个属性constructor(指向构造函数本身)


原型链


概念


                实例对象的__proto__属性,指向的构造函数的原型对象。


(也是一个对象,也有__proto__属性),再一层一层往上找就形成原型链


作用


        1. 当实例对象调用方法,先在自身的this中的方法找

        2. 没有的话,通过__proto_找原型对象,看原型对象里有无定义

        3. 没有的话,通过原型对象的__proto__再到上一层

        4. 一直找到object都没有,则报错


        __proto__ 对象原型的存在,就是为对象成员的查找机制提供了一个方向


this指向


        构造函数和原型对象中的this 都指向当前创建的对象


应用(为js数组Array扩展sum方法)


Array.prototype.sum = function(){

  console.log(this); //this代表这个数组对象

    var total = 0

    for(var i=0; i<this.length; i++){//当前数组长度

        total += this[i]  //当前数组某个值

    }

    return total

}


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70001647/viewspace-2998766/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-06-05

  • 博文量
    11
  • 访问量
    12195