一个关于javascript闭包和this的题目

##1.

1
var name = "The Window";
var object = {
  name: "My Object",
  getNameFunc: function(){
    return this.name;
  }
}

问:object.getNameFuc()的返回值是什么?
答:”My Object”

##2.

1
var name = "The Window";
var object = {
  name: "My Object",
  getNameFunc: function(){
    return function(){
      return name;
    }
  }
}

问:object.getNameFuc()()的返回值是什么?
答:”The Window”,因为根据函数的作用域链(闭包本身->然后是闭包外面的函数->window)找name,但是object.getNameFunc中并没有name变量,所以只能找到window中的name,不要被object.name中的name迷惑了.

##3.

1
var name = "The Window";
var object = {
  name: "My Object",
  getNameFunc: function(){
    return function(){
      return this.name;
    }
  }
}

问:object.getNameFuc()()的返回值是什么?
答:还是”The Window”,因为闭包的调用者或者是执行者永远都是window,所以this也就是window了.