1. ホーム
  2. javascript

[解決済み] Javascriptのすべての関数は値を返さなければならないのでしょうか?

2022-10-24 22:49:35

質問

Netbeansを使用して、各関数にプロフェッショナルなコメントを追加して書いています。そこで、私はそれぞれの関数を /** を押して、それから Enter を押すと、Netbeansが以下の関数に対してデフォルトのコメントスキームを実行します。

今まで、私はこれをPHP言語に対してのみ使用していましたが、この場合、Netbeansは常に、以下のようなコメントスキームを追加していました。 @returns {type} の部分をコメントスキームに追加するだけでした。 return ステートメントが含まれている場合のみです。いわゆるプロシージャ(値を返さない関数)の場合、この部分が欠落していました。

今日、私はJavascript関数について同じことを試み、Netbeansは @returns {undefined} 部分をコメントスキームに追加しました。

これは私を混乱させました。Netbeansは、すべてのJavascript関数が何かを返さなければならないことをこのように示唆していますか?私はどうしたらよいでしょうか。そのコメントスキーム部分を無視(または削除)するか、提案(これが提案である場合)に従って、以下のものを追加します。 return false; をそのような関数の末尾に追加することです。

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

簡単に言うと、「いいえ」です。

リアル 答えはイエスです。JSエンジンは、ある関数が処理を終えたことを通知する必要があり、これは関数が何かを返すことで行われます。これはまた、なぜ の代わりに の代わりに、関数が "have returned" .

明示的な return 文がない関数は undefined を返すように、戻り値を持たないC(++)関数は、(そのシグネチャはこれを反映して) void :

void noReturn()//return type void
{
    printf("%d\n", 123);
    return;//return nothing, can be left out, too
}

//in JS:
function noReturn()
{
    console.log('123');//or evil document.write
    return undefined;//<-- write it or not, the result is the same
    return;//<-- same as return undefined
}

また、JSでは、ほとんどの他の言語と同様に、関数の戻り値を単に無視することも自由にできますし、これは非常に多く行われています。

(function()
{
    console.log('this function in an IIFE will return undefined, but we don\'t care');
}());
//this expression evaluates to:
(undefined);//but we don't care

いくつかの 非常に 低レベルでは、return はある種のジャンプに変換されます。もし関数が本当に 何も を返した場合、次の関数を呼び出したり、イベントハンドラなどを呼び出したりするために、いつ何を呼び出すかを知る方法はありません。

というわけで、おさらいです。JSの関数は、あなたのコードに関しては何も返す必要はありません。しかし、JSエンジンが関係している限りでは、関数 は常に は何かを返します。 return ステートメントによって明示的に、あるいは暗黙的に何かを返します。関数が暗黙的に返す場合、その戻り値は常に未定義となります。