14

Underscore.js の注釈付きソース コードを研究しています。

http://underscorejs.org/docs/underscore.html#section-41

_.first メソッドは次のとおりです。

  _.first = _.head = _.take = function(array, n, guard) {
    if (array == null) return void 0;
    return (n == null) || guard ? array[0] : slice.call(array, 0, n);
  };

質問:

'return void 0;' の理由 「戻る」だけではありません。? 私の知る限り、returnは関数から未定義 (値!) を暗黙的に返します。「return void 0」と同じように。

4

1 に答える 1

9

void 演算子のMDN リファレンスでは、次のように述べています。

void 演算子は、未定義のプリミティブ値を取得するためだけに使用されることが多く、通常は "void(0)" ("void 0" と同等) を使用します。このような場合、代わりにグローバル変数 undefined を使用できます (デフォルト以外の値が割り当てられていないと仮定します)。

したがって、実際には同等ですundefinedが、変数の問題は、undefined別のものとして再定義できることです。個人的にはreturn;、一貫してまったく同じ結果が得られるため、常にそうします(のように:(function() {})() === void 0)。

明確化

一部のコメンターはこれを適切な回答ではないと考えているため:

(function() {})() === void 0は常に true を生成します。これは、 とまったく同じであることを意味しreturn;ます。したがって、単純な return ステートメントが他の場所で使用されているため、これは Underscore ライブラリの矛盾であると考えることができます (そうです、そこでも発生する可能性があります)。

縮小と最適化

別の補遺ですが、縮小中にも最適化されていないようです。クロージャ コンパイラを使用すると、上記のコード サンプルのreturn void 0;vsreturn;バージョンはまだ約 5% 大きくなります。

于 2013-10-18T15:57:32.073 に答える