JavaScript作用域和执行环境


(1)首选要强调的一点是,JavaScript没有块级作用域

  function fun(){
    num = 10;
    alert('fun-num:'+num);  //10
  }
  
  alert('global-num:'+num); //10

我们在函数fun中声明了一个变量num,但是没有通过关键字var修饰,所有JavaScript默认将它作为一个全局的对象,这也是我们经常听到的

JavaScript的变量提升的概念。


(2)JavaScript中有个执行环境的概念,它定义了变量或函数有权访问的其他数据。每个执行环境都有一个关联对象,环境中所定义的对象和函数

都存在这个对象中,我们虽然不能直接获取这个对象,但解析器在后台会使用这个对象。

并且,在JavaScript中执行环境只有两种,一种是全局的执行环境,另一种是函数的执行环境。

说到代码的执行环境就不得不提对象的作用域链,先举个例子:

  var num = 10;
  function fun(){
    alert('num='+num);  
  }

  fun(); //num=10

上述代码很简单,在调用fun()方法时,首先进入的是fun()这个函数的执行环境,JavaScript引擎把这个执行环境推到环境栈中,

代码开始执行,当用到num这个变量时,活动对象首先在自己的作用域中查找是否有这个对象,没有的话,就接着向上查找,最后在全局预中

找到这个对象,并使用它。而这个过程中,经历的所有的作用域形成了一个链,即作用域链。

作用域链的起始端始终是当前的执行环境,结尾段始终是全局环境,如果都没有找到,则汇报undefined。。。


注意:

当遇到with语句和try-catch语句时,作用域链会得到延长


(3)JavaScript垃圾回收

JavaScript拥有自动回收垃圾的机制,所以一般我们不需要手动维护对象的释放。

常用的垃圾回收策略有,标记清除和引用计数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值