作用域链
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总是在运行时才能确定其具体的指向,也才能知道它的调用对象。