2010-12-04 82 views
28

在javascript中给予这三个构造函数:“无功” VS“这个” VS构造函数参数变量

function Foo(data) { 

    var _data = data; 

} 

function Bar(data) { 

    this.data = data; 

} 

function Baz(data) { 

    //just use data freely. 

} 

有什么区别除了施工后data成员的知名度? (例如,你可以做新的Bar().data但不new Foo().data

回答

25

var _data = data;创建一个本地副本的data(未引用)。 this.data = data实际上创建了对象本身的属性。

我建议你阅读这(没有双关语意):http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/

+2

注意:本地变量分配了参数的值。如果参数是对某个对象的引用,则局部变量也将是对同一对象的引用,而不是对该对象副本的引用。 – Guffa 2014-05-09 09:46:28

+1

这是一个很好的答案(双关意图) – Marty 2014-11-27 09:39:09

27

是,不同的是在变量的存储方式。

var声明的变量对构造函数是本地的。如果在范围中声明了任何函数,它将只能在构造函数调用之外生存,因为它会在函数闭包中捕获。

this.声明的变量实际上不是一个变量,而是该对象的一个​​属性,只要该对象确实存在,它就会存活下来,而不管它是否被使用。

编辑:
如果您在未声明变量的情况下使用变量,它们将在全局范围内隐式声明,而不是对象的一部分。一般来说,您应该尝试限制您声明的范围,以免所有事情都在全球范围内结束。