Javascript作用域

2016/1/10 posted in  JavaScript

作用域链

foo = "window";
function first(){
    var foo = "first";
    function second(){
       var foo = "second";
       console.log(foo);
    }
    function third(){
       console.log(foo);
    }
    second(); //second
    third();  //first
}
first();

特殊情况

foo = "window";
function first(){
    var foo = "first";
    function second(){
       var foo = "second";
       console.log(foo);
    }
    function third(obj){
       console.log(foo); //first
       with (obj){
           console.log(foo); //obj
       }
       console.log(foo); //first
    }
    var obj = {foo:'obj'};
    third(obj);
}
first();

在执行third()时,传递了一个obj对象,obj中有属性foo,在执行with语句时,JS引擎将obj放置在了原链表的头部,于是形成的作用域如下:

obj -> third -> first -> window

this关键字

在一个函数中,this总是指向当前函数的所有者对象,this总是在运行时才能确定其具体的指向,也才能知道它的调用对象。

Reference

http://www.cnblogs.com/onepixel/p/5036369.html