在javascript中,执行环境及作用域

        执行环境(execution context)是javascript中最为重要的一个概念。

        其中,全局执行环境是最外围的一个执行环境。当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。全局执行环境的变量对象始终都是作用域链中的最后一个对象。

        标识符解析是沿着作用域一级一级地搜索标识符的过程。搜索过程始终从作用域链的前端开始,然后逐级地向后回溯,直至找到标识符为止。

            var color="blue";
                    function changColor(){
                        if(color=="blue")
                        {
                            color="red";
                        }
                        else
                        {
                            color="blue";
                        }
                    }
                    changColor();
                    alert("Color is now "+color);   //red


         每个环境都可以向上搜索作用域链,以查询变量和函数名,但是任何环境都不能通过向下搜索作用域链而进入另一个执行环境。

        *延长作用域链  //p75

        *没有块级作用域

            if(true)
            {
                var color="blue";
            }
            alert(color);         //blue

           如果在c、c++、或者java中,color会在if语句执行后销毁,但是在js中,if语句中的变量声明会将变量添加到当前的执行环境

           for(var i = 0; i < 10; i++) {
                doSomething(i);
            }
            alert(i);    //10

           在js中,由for语句创建的变量i即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。

           *查询标识符

            搜索标识符,搜索过程从作用域链的前端开始,向上逐级查询与给定名字匹配的标识符。如果在局部环境中找到该标识符,搜索过程停止,变量就绪。如果在局部环境中没有找到标识符,就继续沿作用域向上搜索。搜索过程将一直追溯到全局环境的变量对象。如果在全局环境中没有找到,那么该变量没有声明。

             (1)var color="blue";
                        function getColor(){
                           return color;
                        }
                       alert(getColor());     //blue

             (2)var color="blue";
                      function getColor(){
                          var color="red";
                          return color;
                      }
                     alert(getColor());       //red

               其中在第二段代码中,任何位于局部变量color声明之后的代码,如果不使用window.color都无法访问全局color变量



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值