在javascript中给出了这三个构造函数:
function Foo(data) {
var _data = data;
}
function Bar(data) {
this.data = data;
}
function Baz(data) {
//just use data freely.
}
Run Code Online (Sandbox Code Playgroud)
除了data施工后会员的能见度有什么区别吗?(例如,你可以做新的Bar().data但不是new Foo().data)
Guf*_*ffa 28
是的,区别在于变量的存储方式.
声明的变量var是构造函数的本地变量.如果在作用域中声明了任何函数,它将仅在构造函数调用之后存活,因为它随后在函数闭包中捕获.
声明的变量this.实际上不是变量,而是对象的属性,只要对象发生,它就会存活,无论它是否被使用.
编辑:
如果您在不声明变量的情况下使用变量,它们将在全局范围内隐式声明,而不是对象的一部分.通常,您应该尝试限制声明的范围,以便不是所有内容都在全局范围内.
Chr*_*nte 26
var _data = data;创建一个本地副本(不是引用)data.
this.data = data实际上创建了对象本身的属性.
我建议阅读这个(没有双关语意):http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/