Javascript 变量赋值表达式中逗号和换行符的混淆使用使var看起来是全局的

Javascript 变量赋值表达式中逗号和换行符的混淆使用使var看起来是全局的,javascript,inheritance,Javascript,Inheritance,更新:实际上是变量赋值之前的逗号把我甩了,而不是任何模式。(不要使用此符号。有关详细信息,请参阅) 所以我在读Javascript的继承机制,其中之一就是“函数继承”模式。给出的代码示例(my//wtf的): 结论如下: 您可以看到,提供封装相当容易。这个 _无法从对象外部修改privateObj,除非通过诸如increaseWheels()之类的公共方法公开。同样,私人 值也只能在通过公共方法公开时读取,例如 摩托车的totalNumWheels()函数 这里的每个函数似乎都声明了一个全局变量

更新:实际上是
变量赋值之前的逗号把我甩了,而不是任何模式。(不要使用此符号。有关详细信息,请参阅)

所以我在读Javascript的继承机制,其中之一就是“函数继承”模式。给出的代码示例(my
//wtf的
):

结论如下:

您可以看到,提供封装相当容易。这个 _无法从对象外部修改privateObj,除非通过诸如increaseWheels()之类的公共方法公开。同样,私人 值也只能在通过公共方法公开时读取,例如 摩托车的totalNumWheels()函数


这里的每个函数似乎都声明了一个全局变量
”,这是您永远不应该做的-对吗?我看不到任何闭包(内部函数可以访问内部函数声明时作用域中的任何变量)。我是否缺少一个关闭机制?此代码是否说明了有效的模式?

您的//wtf代码的意思是:

var that = new Object();

您的//wtf代码意味着:

var that = new Object();

它们不是声明全局变量,而是声明闭包变量。附加到
的每个函数定义都是一个闭包(前提是它使用周围范围中的变量)

例如:

function createObj() {
  var that = {}; // Not global but will be used in a closure
  that.name = 'Bob';
  that.doSomething = function() {
    return that.name; // Used as a closure variable
  };
  return that; // Return a new object, not a global one
}
他们应用了相同的原理,只是他们还创建了一个单独的对象,
\u privateObj
,它从不直接公开。这使您拥有其他人无法访问的私有数据和方法

由于声明多个变量的语法不同,您可能认为他们在声明一个全局变量

这:

相当于:

var a = 1;
var b = 2;

注意前面示例中使用的
。这允许您在单个
var
语句中声明多个变量。

它们不是声明全局变量,而是声明闭包变量。附加到的每个函数定义都是一个闭包(前提是它使用周围范围中的变量)

例如:

function createObj() {
  var that = {}; // Not global but will be used in a closure
  that.name = 'Bob';
  that.doSomething = function() {
    return that.name; // Used as a closure variable
  };
  return that; // Return a new object, not a global one
}
他们应用了相同的原理,只是他们还创建了一个单独的对象,
\u privateObj
,它从不直接公开。这使您拥有其他人无法访问的私有数据和方法

由于声明多个变量的语法不同,您可能认为他们在声明一个全局变量

这:

相当于:

var a = 1;
var b = 2;

注意前面示例中使用的
。这允许您在一个
var
语句中声明多个变量。

这里您可以了解为什么每个人都使用
var That=this定义为一个全局变量,这有点奇怪,如果他们使用
var that={}
,这些例子的功能是一样的,而且可能是一个更干净的实现。IrkenInvader:这是我似乎无法理解的,因为他们没有创建全局变量。看到我的答案了。他的例子省略了
var
这个词,因为
这个定义并不构成一个全局的?在这里你可以阅读为什么每个人都使用
var这=这个定义为一个全局变量,这有点奇怪,如果他们使用
var that={}
,这些例子的功能是一样的,而且可能是一个更干净的实现。IrkenInvader:这是我似乎无法理解的,因为他们没有创建全局变量。看我的答案。他的例子省略了
var
这个词,而
这个定义并不构成一个全局的?