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

Pab*_*dez 29 javascript oop

在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/

  • 注意:为局部变量分配参数的值.如果参数是对象的引用,则局部变量也将是对同一对象的引用,而不是对对象副本的引用. (2认同)