• 函数内部运作机制—上下文


    函数内部运作机制

    执行上下文(Context)

    代码执行的环境

    • 全局上下文: JS引擎产生代码环境,运行代码;声明变量——全局变量;

    • 函数上下文:声明变量——局部变量;随上下文的销毁而销毁;

    • eval上下文:eval:把字符串以JS的方式运行;

    变量对象 (VO)

    所有上下文中都有一个变量对象存放所有变量(不包含值).

    没有声明变全局变量 a=3;

    每次调用产生新的上下文,用完了就删除,清内存。

    AO:活动对象,运行中正处于活动状态

    作用域链

    作用域:环境所处的范围

    space:保存上一层作用域链对象;产生:函数被创建(声明)时;谁创建函数就是该函数的上一级。

    当var与函数变量名相同时,先提升函数声明,忽略var(var不提升,不覆盖)。

    1var foo=1;  
        function bar(){    // 声明foo、bar 
            console.log(foo);   // undefined 声明为赋值    
            if(!foo){    // 取反进if
                var foo=10;  //声明提升到function里
            }
            console.log(foo);   // 10
        }
        bar();
    2var a=1;
        function b(){
            a=10; // 局部变量
            return;
            function a(){} //函数声明会提升
        }
        b();
        console.log(a); // 1
    3var f=true;
        if(f===true){
            var a=10;
        }
        function fn(){ 
            var b=20; // b是局部变量,不能出去,只能在function里运行,运行完后消除,console.log(b);在function里会输出 20
            c=30; // 全局变量
        }
        fn();
        console.log(a); // 10
        //console.log(b); // 报错,b 未声明(not defined)
        console.log(c); // 30
    4//var a=b=3; 
        b=3,
        var a=b; // 或 var a=3,b=3;
        (function(){
            //var a=b=5;
            b=5; // 全局
            var a=b; // 局部
        })();
        console.log(a); // 3
        console.log(b); // 5
    5// 当var与函数变量名相同时,先提升函数声明,忽略var(var不提升,不覆盖)
        var foo='A';
        console.log(foo); // A; 直接赋值
    
        var foo=function(){
            console.log('B'); //Function
        };
        console.log(foo); // B
        foo();
    
        function foo(){
            console.log('C'); // Function
        }
        console.log(foo); // B,调用第二个var
        foo();
    6var a=1;
        function b(){
            console.log(a); // undefined
            a=2; // 只提升声明,不提升值
            console.log(a); // 2
            var a=3;
            console.log(a); // 3
        }
        console.log(a); // 1
        b(); 
        console.log(a); // 1
                             // 1 undefined 2 3 1
    • 编写程序遵循“高内聚,低耦合”基本原则。

    • 函数内部运行机制:执行上下文:在不同的上下文中,声明变量产生不同结果

    • 变量对象存放上下文中所有变量(不包含值);

        一个变量没有用var、let声明,直接赋值,变全局变量。

    当var和function变量名相同,先提升函数声明,忽略var(var不提升,不覆盖)。
  • 相关阅读:
    bzoj1037: [ZJOI2008]生日聚会Party(DP)
    bzoj1034: [ZJOI2008]泡泡堂BNB(贪心)
    bzoj1025: [SCOI2009]游戏(数学 + 思维 + DP)
    第十章、嵌入式Linux的调试技术 读书笔记
    第九章、硬件抽象层:HAL 读书笔记
    第八章 让开发板发出声音:蜂鸣器驱动
    ANDROID深度探索(卷1)HAL与驱动开发 第七章
    ANDROID深度探索(卷1)HAL与驱动开发 第六章
    ANDROID深度探索(卷1)HAL与驱动开发 第五章
    ANDROID深度探索(卷1)HAL与驱动开发 第四章
  • 原文地址:https://www.cnblogs.com/llying/p/7658940.html
Copyright © 2020-2023  润新知