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

函数内部运作机制

执行上下文(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不提升,不覆盖)。

转载于:https://www.cnblogs.com/llying/p/7658940.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值