特别是在JavaScript中,何时使用分号,何时使用分号。
以下是一段代码示例;
function Drawable() {
this.init = function(x, y) {
this.x = x;
this.y = y;
}
this.speed = 0;
this.canvasWidth = 0;
this.canvasHeight = 0;
this.draw = function() {
};
}
有人可以告诉我为什么
this.init = function(x,y) {}
不以分号结尾,但是
this.draw = function(){};
在上面的代码片段中以分号结尾?
答案 0 :(得分:8)
这是自JavaScript运动以来的个人风格问题automatic semicolon insertion。:
当程序从左到右解析时,会遇到任何语法产生不允许的令牌(称为违规令牌),然后自动插入分号违规令牌if ...违规令牌与前一个令牌至少有一个 LineTerminator 分开。
第一个不以分号结尾,因为上面的代码不一致。
一贯的方式是:
this.init = function(x, y) {
this.x = x;
this.y = y;
};
之前是否已经讨论了you should use them的问题。
答案 1 :(得分:1)
来自Google JavaScript Style Guide:
// 1.
MyClass.prototype.myMethod = function() {
return 42;
} // No semicolon here.
(function() {
// Some initialization code wrapped in a function to create a scope for locals.
})();
var x = {
'i': 1,
'j': 2
} // No semicolon here.
// 2. Trying to do one thing on Internet Explorer and another on Firefox.
// I know you'd never write code like this, but throw me a bone.
[normalVersion, ffVersion][isIE]();
var THINGS_TO_EAT = [apples, oysters, sprayOnCheese] // No semicolon here.
// 3. conditional execution a la bash
-1 == resultOfOperation() || die();
1 - JavaScript错误 - 首先调用返回函数42 第二个函数作为参数,然后数字42被“调用” 导致错误。
2 - 你很可能会得到'不这样的 在运行时尝试调用时未定义'属性中的属性 X [ffVersion] isIE。
3 - 除非resultOfOperation()是,否则调用die NaN和THINGS_TO_EAT被赋予die()的结果。