5

まず、これは ASI に関する質問ではありません。ここでセミコロンの自動挿入が適用されるかどうかを尋ねているわけではありません (そうです、しかし、その冒頭の文は、セミコロンを使用すべきか使用すべきでないかという議論を避けるための試みです。自分...)

関数宣言の後にセミコロンを付けてはいけないことを知っています...

function foo() { 
  // do stuff
} // no semicolon

exportしかし、関数宣言の後にセミコロンは必要ですか?

export function foo() {
  // do stuff
} // semicolon or not to semicolon?

いずれにせよ、その理由も知りたいです。

4

2 に答える 2

7

いいえ、セミコロンは必要ありませんが、セミコロンを追加しても害はありません。

ES6 仕様を見ると、この署名が宣言と見なされ、通常の関数宣言と同様に、その後にセミコロンが必要ないことがわかります。

export Declaration

セミコロンが続く必要があるステートメント (明示的または暗黙的) は、そのドキュメントでそのように注記されています。例えば:

export * FromClause ;

そこ;は必須です。宣言では、そうではありません。もちろん、セミコロンを挿入しても害はありません。JS インタープリターはそれを空のステートメントとして扱います。

于 2016-12-01T22:33:08.520 に答える
3

いいえ、ここにセミコロンは必要ありません。MDNからのこの例を参照してください:

export default function() {} // or 'export default class {}'
// there is no semi-colon here

ECMAScript 仕様も参照してください。

構文

ExportDeclaration :
  export * FromClause ;
  export ExportClause[~Local] FromClause ;
  export ExportClause[+Local] ;
  export VariableStatement[~Yield, ~Await]
  export Declaration[~Yield, ~Await]
  export defaultHoistableDeclaration[~Yield, ~Await, +Default]
  export defaultClassDeclaration[~Yield, ~Await, +Default]
  export default[lookahead ∉ { function, async [no LineTerminator here] function, class }]AssignmentExpression[+In, ~Yield, ~Await] ;

ご覧のとおり、 の後にセミコロンはありませんDeclaration

于 2016-12-01T22:29:29.870 に答える