2016-06-12 123 views
-3

代码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重命名为“this”这个“that”。但我不知道为什么代码1提醒“窗口”。

+0

我的回答有用吗?或者您需要更多信息? –

+0

非常感谢,它确实有帮助。 –

+0

然后你就可以接受并注册它... –

回答

1

大量关闭答案澄清范围如何JavaScript的作品!但我确实有一个关于你的代码的问题:

为什么两个返回语句在你的函数中?

陈述中你的函数,即

return function(){ 
    return this.name; 
} 

是错误的,它cuase首先获得您的弗朗功能,目前的范围,即窗口/文件返回。因此内部语句实际上被称为当前范围,因此返回“The Window”!

insted的你只需拨打

return this.name; 

没有包装的功能,现在它会导致它在对象范围内返回返回“对象”!

0

提示“本”: this指向当前上下文的对象(而不是函数)。

所以这里方面是很重要的。

所以 在编码1 - this是匿名函数里面,因此它在全球范围内,所以在这里,它指向window对象。 即 这里它将打印:window.name = The Window

在码2 - this是创建object所以它在object上下文实例函数内部,所以在这里,它指向object

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

希望这将有助于:)谢谢:)

+0

那么,这里的'function(){return this.name}'在全局上下文中,'this'指向window,'var name'等价于'window.name'? –

+0

是的,因为声明不在任何函数内,这意味着它在全局范围内声明。 而所有的全局变量都属于窗口对象,所以这里'window.name'指向'var name'。 –

-1

这可能是关于“关闭”的问题,你可能想看看这个: How does closure work

在代码1中,this在设备下,所以它直接指向设备的名称。

而且var name这里是全球var.So你会得到The Window

+0

谢谢你的回复 –