• 变量对象详解-笔记


    原文参考http://mp.weixin.qq.com/s/LijjPErxcFB4pN_wUo2cnw

    调用函数时,会创建一个新的执行上下文

    它的生命周期有两个阶段
    1创建阶段-创建变量对象,建立作用域链,确定this的指向
    2执行阶段-执行代码,完成变量赋值,函数引用及其他代码的执行

    变量对象的创建
    1.建立arguments对象。检查上下文中的参数,建立属性与属性值
    2.检查函数声明,即用function声明的函数。在变量对象中,key为函数名,value为指向该函数所在内存地址引用
    3.检查变量声明,在变量对象中设置key为变量名,value为undefined,如果存在跳过,原属性值不变

    未进入执行阶段,变量对象中各属性无法访问
    在进入执行阶段,各属性可以访问

    变量对象和活动对象
    都是同一个对象,处于不同生命周期,前者时创建阶段后者是执行阶段

    demo1
    function test(){
    console.log(a)
    console.log(foo())
    var a = 1
    function foo(){
    return 2
    }
    }
    test()

    代码执行顺序为

    function test(){
    function foo(){
    return 2
    }
    var a
    console.log(a)
    console.log(foo())
    a=1
    }
    test()// 调用函数,即将开始创建阶段

    demo2
    function test(){
    console.log(foo)
    console.log(bar)

    var foo = 'Hello'
    console.log(foo)
    var bar = function(){
    return 'world'
    }
    function foo(){
    return 'hello'
    }
    }
    test()

    代码执行顺序
    function test(){
    // 执行阶段先是函数引用
    function foo(){
    return 'hello'
    }
    // 变量声明
    var foo // var foo = undefined
    var bar
    console.log(foo) // 此时foo还是function foo(){return 'hello'},因为上面foo=undefined会跳过
    console.log(bar) // undefined

    foo='Hello'
    console.log(foo) // hello,注意此时console在赋值之后才执行,所以能取到值
    bar=function(){
    return 'world'
    }
    }
    test()

    在全局上下文中变量对象就是window对象,this也是指向window
    浏览器不关掉窗口,全局上下文一直存在

  • 相关阅读:
    Thinking in Java
    Interview Common Sample Codes
    Longest Common Substring
    Mac键盘按键符号
    ElasticSearch
    Variables and Arithmetic Expression
    Associative Containers
    Container Adaptors
    string Type
    初识 tk.mybatis.mapper 通用mapper
  • 原文地址:https://www.cnblogs.com/victory820/p/6897318.html
Copyright © 2020-2023  润新知