在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
)
答案 0 :(得分:28)
是的,区别在于变量的存储方式。
使用var
声明的变量是构造函数的本地变量。如果在作用域中声明了任何函数,它将仅在构造函数调用之后存活,因为它在函数闭包中被捕获。
用this.
声明的变量实际上不是变量,而是对象的属性,只要对象发生,它就会存活,无论它是否被使用。
编辑:
如果在不声明变量的情况下使用变量,则它们将在全局范围内隐式声明,而不是对象的一部分。通常,您应该尝试限制声明的范围,以便不是所有内容都会在全局范围内结束。
答案 1 :(得分:26)
var _data = data;
创建data
的本地副本(不是引用)。
this.data = data
实际上创建了对象本身的属性。
我建议阅读此内容(无双关语):http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/