Javascript 声明var变量与使用self
有点混乱。以下是JS代码:Javascript 声明var变量与使用self,javascript,scope,Javascript,Scope,有点混乱。以下是JS代码: (function(){ var self = this; var view = 12; self.value = null; .... }); 我知道使用var view=12会为视图变量创建一个局部范围。但是self.value不是也为value变量创建了一个“局部”范围吗?如果是的话,有什么区别或者我遗漏了什么 self是一个局部变量。使用self.value,您将在self变量上添加一个原型属性,并将其分配给nullse
(function(){
var self = this;
var view = 12;
self.value = null;
....
});
我知道使用var view=12会为视图变量创建一个局部范围。但是self.value不是也为value变量创建了一个“局部”范围吗?如果是的话,有什么区别或者我遗漏了什么
self
是一个局部变量。使用self.value
,您将在self
变量上添加一个原型属性,并将其分配给null
self.value=…
只需在对象self
(this
)上创建一个属性即可。变量和属性是两种不同的动物。不知道你想在这里比较什么。谢谢Felix,我是JS的新手。在阅读了你的答案,PHeonix的下面,以及提供的链接后,我理解了差异。明白了!函数可以用作构造函数。this.something是实例特定的成员,构造函数原型上的成员在实例之间共享。声明为var的成员可以在闭包中使用,以模拟私有成员。这里全部解释:什么是“原型属性”?它与“普通”属性有何不同?什么是“原型变量范围”?“基本概念是您只能访问相同范围或更高范围内的变量”,这就是范围的工作原理。这与原型无关。@FelixKling OP似乎一开始就不明白作用域是如何工作的——这就是我为什么要把这个花絮包括在内。@Bergi只是强调JS是一种原型语言——如果你习惯于使用Java或C#,很自然,你会感到困惑,你可以从一个对象上挂起任何你想要的旧东西:)但你似乎把它与原型继承(不知何故)混为一谈,这与OP拥有的代码无关,比帮助IMO更令人困惑。范围与原型无关。