关于闭包和this问题的两个小例子,麻烦老师解释下!

关于闭包和this问题的两个小例子,麻烦老师解释下!

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

第一个例子弹出The Window,这里的this为什么指向window?第二个例子改变了this指向,为什么?求老师解答!

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
提问者 慕丝0963956 2017-08-29 11:17:45

so easy,回过头来再看这个问题就恍然大悟了

卡布琦诺 2017-08-28 18:16:05

第一段代码,作为函数调用,函数也可以直接被调用,此时 this 绑定到全局对象。在浏览器中,window 就是该全局对象,函数被调用时,this 被绑定到全局对象,接下来执行赋值语句,相当于隐式的声明了一个全局变量。

第二段代码,作为对象方法调用,在 JavaScript 中,函数也是对象,因此函数可以作为一个对象的属性,此时该函数被称为该对象的方法,在使用这种调用方式时,this 被自然绑定到该对象。

祝学习愉快!



  • 提问者 慕丝0963956 #1
    不太懂啊,第一个不也是作为对象调用的吗?
    2017-08-29 11:04:00
  • 卡布琦诺 回复 提问者 慕丝0963956 #2
    第一个没有被指定,因此会向上一级一级的查找,直到找到最高级的window,而在浏览器中,window 是全局对象,函数被调用时,this 被绑定到全局对象,祝学习愉快!
    2017-08-29 11:24:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师