关于this的问题

链接: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
posted @ 2017-03-13 16:45  我啊我  阅读(220)  评论(0编辑  收藏  举报