我是javascript的新手,并且最近选择了另一个团队开发的应用程序。
在这个程序中,他们一次声明了几个变量,但是有一个缺少的逗号,如:
var me = this,
missing = this.missingComma
grid = something.Something;
如果有任何后果,在第二次输入后没有逗号会有什么后果。刚刚运行时,相关位似乎有效。代码没有测试,因为它的javascript我无法编译它,我也不知道它应该怎么做,不幸的是不会摔倒'目前是我最好的猜测'做它应该做的事情'!
为什么会这样?这不是语法错误吗?
答案 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”的警告