首页 > 网站 > WEB开发 > 正文

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

2024-04-27 15:14:52
字体:
来源:转载
供稿:网友

        执行环境(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变量


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表