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
这个词,而这个定义并不构成一个全局的?