JavaScript杂谈 ,三 作用域与this

先看一道前端笔试题:

var a=10;

  function test(){

    a=5;

    alert(a);

    alert(this.a);

    var a;

    alert(this.a);

    alert(a);

  }

  test(); // 5 10 10 5

  new test(); // 5 undefined undefined 5

简单的解释为:

  1.JavaScript的作用域是函数作用域,定义在函数中的参数和变量在函数外部是不可见的,而且在一个函数中的任何位置定义的变量在函数的任何地方都可见。

  2.this取决于函数调用的模式:

    (1)当调用某个对象的方法时,this被绑定到该对象。

    (2)当调用全局函数时,this被绑定到全局对象(浏览器中为window对象)。

    (3)当函数作为构造函数,使用new操作符生成新对象时,this被绑定到该新对象。

    (4)当执行call/apply方法是,this被绑定到call/apply方法的第一个参数和。

要想理解JavaScript的作用域需要理解以下几个概念:

执行环境(execution context)

变量对象(variable object) 活动对象(activation object)

作用域链(scope chain)

这两篇博客有比较清楚地讲解:理解Javascript_12_执行模型浅析JavaScript对象模型-执行模型