1.this关键字
this代表的是执行这个this代码的环境对象
this在脚本(全局函数)中代表的是window全局对象
this关键字代表了函数调用时的调用者
function fn(){
console.log(this)
}
fn()// 这个代码不是fn在调用 fn代表的是一个函数 隐式的window才是调用者
2.this常见的调用者
fn() // window
obj.fn() //obj
obj.xx.xx2() //obj.xx
(function(){})() // window
fn()() //window
fn()[1]() // fn()返回的数组
3.this代表的是谁
//在js程序中无论多么复杂的程序 this只需要看离最近(嵌套)的function的这个单词的调用者
1.看this在哪个函数里面:this这个单词离他最近(嵌套)的function这个单词就是那个函数,没有就是window
2.这个函数找到了 是哪个代码让这个找到的函数执行的 直接辨别调用者
4.代码示例
代码如下(示例):
function a(xx) {
this.x= xx;
return this;
};
var x = a(5);
//window.x=window.a(5)
/*
window.x=window
==>{
var xx=5
this.x=xx==>window.x=5
return window
}
*/
var y = a(6);
//window.y=window.a(6)
/*
window.y=window
{
var xx=6;
window.x = xx;
window.x= 6;
return this;
}
*/
// ==> y=window x=6
console.log(x.x); //==> 6.x ==> undefined
console.log(y.x); //y.x ==> window.x ==> 6
var a = {n:1}; // a引用了{n:1}这个对象
var b = a; // b也引用了{n:1}这个对象
a.x = a = {n:2};
// a是最后赋值的 但是a的引用声明是一开始就有的 a变量重新引用{n:2} a.x也指向{n:2}
console.log (a.x); // a中只有{n:2},因此a.x就是undefined
console.log (b.x); // b.x<==>a.x a.x==>{n:2} b.x==>{n:2}