链接:https://www.nowcoder.com/questionTerminal/ad1aab0fd50a4185ac1ae450096d9095
来源:牛客网
var myObject = {
foo:
"bar"
,
func: function() {
var self =
this
;
console.log(
this
.foo);
console.log(self.foo);
(function() {
console.log(
this
.foo);
console.log(self.foo);
}());
}
};
myObject.func();
依次输出 bar bar undefined bar
理解关键:方法/函数是由谁(对象) 调用 的,方法/函数内部的 this 就指向谁(该对象);
注意:被谁调用,不是处于谁的作用域,即使在作用域
1、func是由myObject调用的,this指向 myObject。
2、self指向myObject,相当于 myObject的this的副本。
3、这个立即执行匿名函数表达式(IIFE)是由window调用的,this指向 window 。第三个是闭包,this指向window。
4、IIFE的作用域处于myObject.func的作用域中,本作用域找不到self变量,沿着作用域链向上查找self变量,找到了指向 myObject对象的 self。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.this总是指向调用它的那个对象,如果是立即执行函数或者setTimeOut()这样的全局(window)函数则this指向的是window对象即this为全局的this.x中的x为全局变量
2.js的作用域链,如果本作用域着不到对象就向上一层找
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
var color = "green";
var test4399 = {
color:"blue",
getColor:function (){
var color = "red";
alert(this.color);
}
}
var getColor = test4399.getColor;
getColor();
test4399.getColor();
1.getColor() var getColor = test4399.getColor;将test4399对象内部的getColor和全局作用域中的getColor指向同一个函数,相当于在全局作用域中定义了一个函数,即var getColor = function(){var color = "red";alert(this.color);};执行getColor()函数时this指向的window,因为window.color为green,所以弹出green
2.test4399.getColor() 此时this指向的是test4399,test4399.color为blue,所以弹出blue
2.test4399.getColor() 此时this指向的是test4399,test4399.color为blue,所以弹出blue