何时使用分号

时间:2013-06-26 18:33:02

标签: javascript

特别是在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(){};

在上面的代码片段中以分号结尾?

2 个答案:

答案 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()的结果。