• 开心菜鸟系列学习笔记------javascript(4)


       
        一、全局上下文中的变量对象:
            1)全局对象(Global object) 是在进入任何执行上下文之前就已经创建了的对象;
    这个对象只存在一份,它的属性在程序中任何地方都可以访问,全局对象的生命周期终止于程序退出那一刻。
            2)全局对象的window属性就可以引用全局对象自身(当然,并不是所有的具体实现都是这样
            3)回到全局上下文中的变量对象——在这里,变量对象就是全局对象自己:
            4)非常有必要要理解上述结论,基于这个原理,在全局上下文中声明的对应,我们才可以间接通过全局对象的属性来访问它(例如,事先不知道变量名称)。

        二、函数上下文中的变量对象
        1)在函数执行上下文中,函数名是不能直接访问的,此时由活动对象(activation object,缩写为AO)扮演VO的角色。
        2)
            Arguments对象是活动对象的一个属性,它包括如下属性:
            1.callee — 指向当前函数的引用
            2.length — 真正传递的参数个数
            3.properties-indexes (字符串类型的整数) 属性的值就是函数的参数值(按参数列表从左到右排列)。 properties-indexes内部元素的个数等于arguments.length. properties-indexes 的值和实际传递进来的参数之间是共享的。
            3)进入执行上下文

            当进入执行上下文(代码执行之前)时,VO里已经包含了下列属性(前面已经说了):

            函数的所有形参(如果我们是在函数执行上下文中)

            — 由名称和对应值组成的一个变量对象的属性被创建;没有传递对应参数的话,那么由名称和undefined值组成的一种变量对象的属性也将被创建。

            所有函数声明(FunctionDeclaration, FD)

        —由名称和对应值(函数对象(function-object))组成一个变量对象的属性被创建;如果变量对象已经存在相同名称的属性,则完全替换这个属性。

    所有变量声明(var, VariableDeclaration)

        — 由名称和对应值(undefined)组成一个变量对象的属性被创建;如果变量名称跟已经声明的形式参数或函数相同,则变量声明不会干扰已经存在的这类属性。
        函数表达式不会影响VO。
        终于明白 function (){}; //后面为什么要分号,因为如果后面出现了括号,那怕是在下一行的话也会执行这个函数的,变量声明在顺序上跟在函数声明和形式参数声明之后。
        4)如果没有用var声明变量,这仅仅是给全局对象创建一个新的属性。并不是说他不可以改变,而是指它并不符全ECMAcript规范中的概念,
     所有的根源仍然是Vo和进入上下文阶段和代码执行阶段,没有用Var声明的,在进入上下文阶段,并没有值。而用var声明的变量,是会赋予初值undefined。还有一个知识点就是,delete不可以删除var声明的变量


     

  • 相关阅读:
    利用sklearn训练LDA主题模型及调参详解
    关联规则挖掘:Apriori算法(基于Groceries数据集)
    极大连通子图与极小连通子图
    TCP协议“三次握手”与“四次挥手”详解(下)
    TCP协议“三次握手”与“四次挥手”详解(上)
    95题--不同的二叉搜索树II(java、中等难度)
    96题--不同的二叉搜索树(java、中等难度)
    CRC循环冗余校验---模2除法解析
    黑盒测试用例设计方法总结
    软件配置管理和软件维护的区别【详细】
  • 原文地址:https://www.cnblogs.com/kaixincainiao/p/3415624.html
Copyright © 2020-2023  润新知