初步理解this:
解析器(或叫浏览器)在调用函数每次都会向函数内部传递进一个隐含的参数。
function fun(a,b){ console.log("a="+a+",b="+b); } fun(123,456);//a=123,b=456
这是我们传递参数,而不是函数向函数内部传递参数。
这个隐含的参数就是this,这个this浏览器每次都会传。
function fun(a,b){ console.log(this); } fun(123,456);//this:Window {parent: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}
这里this是全局对象window;
this指向的是一个对象,这个对象我们称为函数执行的上下文对象;
function fun(a,b){ console.log(this); } var obj={ name:'孙悟空', sayName:fun } obj.sayName();//this:{name: "孙悟空", sayName: ƒ}
根据我们这个函数的调用方式的不同,this会指向不同的对象。
(1)以函数的形式调用时,this永远都是window;
(2)以方法的形式调用时,this是调用方法的那个对象;
深入理解this(难题):
window.val=1; var obj={ val:2, dbl:function(){ this.val *=2; val *=2; console.log(val); console.log(this.val); } }; obj.dbl(); var func=obj.dbl; //结果:2 4 8 8