在javascript中声明多个变量时错过逗号的后果?

时间:2014-01-22 15:37:54

标签: javascript comma

我是javascript的新手,并且最近选择了另一个团队开发的应用程序。

在这个程序中,他们一次声明了几个变量,但是有一个缺少的逗号,如:

var me = this,
    missing = this.missingComma
    grid = something.Something;

如果有任何后果,在第二次输入后没有逗号会有什么后果。刚刚运行时,相关位似乎有效。代码没有测试,因为它的javascript我无法编译它,我也不知道它应该怎么做,不幸的是不会摔倒'目前是我最好的猜测'做它应该做的事情'!

为什么会这样?这不是语法错误吗?

3 个答案:

答案 0 :(得分:4)

在JavaScript中,分号不需要表示行的结尾。换行符足以表明下一行是单独的语句而不是前一行代码的延续(就像使用逗号表示多个变量的情况一样)。

您的代码基本上与此相同:

var me = this, missing = this.missingComma;
grid = something.Something;

由于它声明了grid变量没有var关键字,因此最终会在全局范围内创建grid,而不是当前范围。这通常是你想要避免的东西,但如果它确实发生的话,它不会成为世界末日 - 在这种情况下它甚至可能是有意的(虽然我猜不会)。

答案 1 :(得分:0)

Javascript在很多自由中是无用的;)

如果您在Javascript中阅读有关分号,逗号和换行符的其他信息,也许它可以帮助您理解JS的一些特性:

http://www.codecademy.com/blog/78-your-guide-to-semicolons-in-javascript

为了便于阅读,我建议您使用经典方法。

var me  = this;
var you = that;

或至少

var me = this, you = that;

对于其他人,我认为安东尼·格里斯特已经提到了这一点。

答案 2 :(得分:0)

即使在javascript中,分号不是必需的,但它现在必须是一天,因为如果你希望你的JavaScript被最小化,它必须有所有的分号。最小化将完整的JavaScript放在一行中......用短的变量替换长变量等等。

另一方面......回到你的问题。

如果你在一个JavaScript“命名空间”(实际上是一个对象)中声明你的var,那么所有的变量都是“私有的”,你可以选择使用reveal pattern使其成为“公共”。

这是一个很好的做法,否则所有变量都在windows范围内声明...实际上可以被页面中使用相同变量名称的任何其他部分覆盖,即使您认为它是完全独立的

所以你实际上可以这样做:

var MyNamespace || {} 
// this delcares an object MyNamespace only if it doesn't exists yet
MyNamespace.Logic = function(){
    var self = this,
    myPrivateVariable = "Hello",
    self.myPublicVariable = "World",
    self.printHello = function(){
        alert(myPrivateVariable +' ' +self.myPublicVariable );
    };//this semicolon closes the var statement
};

现在你可以在你的页面上使用somehwer

var newInstanceOnMyLogic = new MyNamespace.Logic() 

这相当于写作       var newInstanceOnMyLogic = new window.MyNamespace.Logic();

但是你的变量myPrivateVariable和myPublicVariable不再是在windows上下文中而且不能被覆盖

现在,如果你写了像

这样的东西
alert(newInstanceOnMyLogic.myPublicVariable);

你会得到一个“世界”

但是

alert(newInstanceOnMyLogic.myPrivateVariable );

你会得到一个未定义的

和     newInstanceOnMyLogic.printHello();

会收到“Hello World”的警告