js的执行环境和作用域

执行环境

执行环境定义了变量或函数有权访问的其他数据(可把执行环境看作对象,含有属性和函数),决定了她们各自的行为。
执行环境有全局执行环境和局部执行环境,每个函数都有自己的执行环境(局部执行环境),window对象的执行环境是全局执行环境
例如,这个例子中共有三个执行环境,全局执行环境,函数A,B的局部执行环境

var color="pink";
function A(){
      var a="blue"
      function B(){
           var b="white"
      }

作用域

当代码在执行环境中执行时,创建了一个作用域链,创建的的目的是为了保证对其他执行环境的数据有序访问,将上边的例子变形

var color="pink";
function A(){
      var a=color;  //pink
      var anothercolor="yellow";
      function B(){
           var b=anothercolor;  //yellow,代码1
           var bb="red";
           }
           B();
           //这里不能访问b,和bb;
      }
      A();

这个例子中,加入我们在执行代码1,那么函数B的执行环境就在作用域链的前端,作用域链的下一个对象就是包含环境函数B,作用域链的最后一个对象就是全局执行环境(window),作用域最前端的可以访问作用域后边执行环境的变量和函数,反之不可,也就是内部环境可以通过作用域链访问外部环境。但是外部环境不能访问内部环境.

**

js没有块级作用域

if(true){
var a="green"
}
alert(a);   //green,代码1

这个例子放在c语言中变量a会在if语句执行完被销毁,因为变量会在自己的块级作用域内有效,而js没有块级作用域,它的变量会被添加到当前执行环境中(全局执行环境),全局执行环境是当浏览器窗口关闭才会被销毁,所以才有了上边的结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值