1. ホーム
  2. javascript

[解決済み] CoffeeScriptでの関数宣言

2023-08-04 04:44:16

質問

CoffeeScriptで関数を定義する場合、以下のように記述します。

a = (c) -> c=1

のみを取得することができます。 関数式 :

var a;
a = function(c) {
    return c = 1;
};

しかし、個人的にはよく 関数宣言 を使うことが多いです。

function a(c) {
    return c = 1;
}

私は最初の形式を使っているが、CoffeeScriptで関数宣言を生成する方法があるのだろうか。もし、そのような方法がないのであれば、なぜCoffeeScriptがこのようなことを避けるのか知りたいです。関数がスコープの一番上で宣言されている限り、JSLintが宣言のためにエラーを叫ぶとは思えません。

どのように解決するのですか?

CoffeeScriptは関数宣言(別名:"名前付き関数")を1箇所だけ使用します。 class の定義で使用します。例えば

class Foo

は、以下のようにコンパイルされます。

var Foo;
Foo = (function() {
  function Foo() {}
  return Foo;
})();

によると、CoffeeScriptが関数宣言を他の場所で使わないのは、そのためだそうです。 FAQ :

<ブロッククオート

これは Microsoft のせいです。本来は、適切な名前を取得できるすべての関数に名前が付けられていましたが、IE バージョン 8 以下では、名前の付いた関数が宣言と式の両方として扱われるというスコープの問題があります。参照 この を参照してください。

要するに、関数宣言を不用意に使うとIE(9以前)と他のJS環境との間で矛盾が生じる可能性があるため、CoffeeScriptは関数宣言を避けているのです。