'var'vs'this'vs构造函数 - 参数变量

时间:2010-12-04 16:05:03

标签: javascript oop

在javascript中给出了这三个构造函数:

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

2 个答案:

答案 0 :(得分:28)

是的,区别在于变量的存储方式。

使用var声明的变量是构造函数的本地变量。如果在作用域中声明了任何函数,它将仅在构造函数调用之后存活,因为它在函数闭包中被捕获。

this.声明的变量实际上不是变量,而是对象的属性,只要对象发生,它就会存活,无论它是否被使用。

编辑:
如果在不声明变量的情况下使用变量,则它们将在全局范围内隐式声明,而不是对象的一部分。通常,您应该尝试限制声明的范围,以便不是所有内容都会在全局范围内结束。

答案 1 :(得分:26)

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

我建议阅读此内容(无双关语):http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/