Javascript 声明var变量与使用self

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

有点混乱。以下是JS代码:

(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更令人困惑。范围与原型无关。