什么是'这"是什么意思?这些代码之间的区别?

时间:2016-06-12 07:52:53

标签: javascript

代码1:



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




警告"窗口"

代码2:



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




警告"我的对象"。

我知道代码2重命名"这" "那是"但我不知道为什么代码1警告" The Window"。

3 个答案:

答案 0 :(得分:1)

说明javascript范围的工作原理!但我对你的代码有疑问:

  

为什么函数中有两个return语句?

函数中的

语句,即

return function(){
    return this.name;
}

是错误的,因为它首先从你的函数返回到当前范围,即窗口/文档。因此,内部语句实际上是为当前范围调用的,因此返回" The Window"!

Insted你只需要打电话

return this.name;

没有包装函数,现在它将返回"对象"因为它在对象范围内返回!

答案 1 :(得分:0)

提示"此": this指向当前上下文的Object(不是函数)。

所以这里上下文很重要。

所以 在code1中 - this在匿名函数内部,因此它在全局上下文中,所以在这里,它指向window对象。 即 这里将打印:window.name = The Window

在code2中 - this位于创建的object的实例函数中,因此它位于object上下文中,所以在这里,它指向object

即。 这里将打印:object.name = My Object

希望它会有所帮助:)谢谢:)

答案 2 :(得分:-1)

这可能是关于"关闭"的问题,您可能希望看到: http://www.demo.com/xxxx?t=

在代码1中,this位于设备下方,因此它指向设备的名称。

var name这里是全局变量。所以你会得到The Window