我需要知道这三种类型的变量初始化之间的区别。
1) - 第一种类型是使用"这个"关键字。
var x=function (data1,data2){
this.data1=data1;
this.data2=data2;
}
2) - 其次是使用" var"关键字...从我所知道的var关键字使得变量local的范围,这意味着只有当我们在函数内时才能访问var。
var x=function (data1,data2){
var data1=data1;
var data2=data2;
}
3) - 第三种类型没有使用任何关键字..据我所知,我们没有用变量指定var关键字,然后它变为整个应用程序的全局。所以你可以在任何你想要的地方访问它...但在这种情况下我认为这会引发错误...因为如果data1是变量或参数(传递的参数),javascript将如何知道?
var x=function (data1,data2){
data1=data1;
data2=data2;
}
答案 0 :(得分:2)
1) this.foo = bar
您提到的第一种类型使您的变量成为(构造函数)函数的属性。在JavaScript中,函数是对象。因此,使用this
使变量成为对象的属性(在本例中为构造函数)。
2) var x = 7
让我开始说,任何时候你不在变量前面使用var
(除了上面的this
内容),该变量将成为全局上下文对象的成员({ {1}},对于大多数用户代理而言。)
JavaScript和编程中的思想领袖将全局变量视为罪,或代码嗅觉。尽可能避免使用全局变量。
第一种方法(window
)的问题在于,在ECMAScript 5之前,没有好的方法来强制实现对象属性的隐私(正如您可能在基于C ++的经典语言中找到的那样,如Java,PHP,等等)。 ECMAScript 5及更高版本允许您为可写性,可枚举性等内容分配this
...
但是,因为它与attributes
有关,所以var
总是使其变量对函数对象是私有的。您无法从外部客户端代码(如
var
但是,您可以创建一个具有访问权限的功能(称为访问者)。实际上,当您看到dog.age = 5 //Trying to assign the number five to a var variable.
时,请认为该对象的范围是私有的。这是它的要点。 Closure (来自附件)是JavaScript中的一个重要主题。当你开始使用var
时,你不可避免地会开始学习关闭。
3)没有关键词。
最后,对于大多数用户代理,使用裸变量将所有这些变量附加到全局对象(var
)。这往往会导致混淆和调试问题。您可能会无意中发生碰撞或冲突,其中值在构造函数的许多实例中被更改。这不是要走的路。
总之,关于JavaScript变量主题的一本很棒的书是The Principles of Object Oriented JavaScript。扎卡斯先生解释事情比克罗克福德和弗拉纳根更好。我强烈推荐它。了解你的目标。知道你的问题。避免全局变量。了解JavaScript的对象模式和范围。在学习JavaScript中的范围和上下文时,我建议JavaScript: The Definitive Guide。