11

関連するコードを記述およびグループ化するために JS コード内で Named IIFE を利用することの長所と短所は何ですか?

私はこの「パターン」を使用して、1 か所でのみ実行されるより手続き型のコードに構造を与えてきました。


(function hideStuffOnInstantiaton(){
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
}());

これは両方よりも好ましいと思います:

// hide Stuff on Instantiaton
$('oneThing').hide().removeClass();
$('#somethign_else').slideUp();
$('.foo').fadeOut();

時間の経過とともにコメントがコードから分離される可能性があり、コメントがどの行に適用されるかがすぐにはわからないためです

そしてへ:

function hideStuffOnInstantiaton(){
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
};

hideStuffOnInstantiaton();

一箇所でしか実行されないのに、なぜ関数とその実行を分離するのでしょうか?


このパターンを使用する場合、パフォーマンス、保守性、テスト容易性、またはクロスブラウザーに関する考慮事項はありますか? 多くの人が実際にこれを使用しているのを見たとは思いません、非常に便利なように感じます

4

2 に答える 2

8

私はいつもラベルがかっこいいと思っていました。

hideStuffOnInstantiaton: {
  $('oneThing').hide().removeClass();
  $('#somethign_else').slideUp();
  $('.foo').fadeOut();
}

実際には、これを行うのは通常ばかげています。代わりに、グループ化された機能は通常、独自の機能に属します。

于 2013-03-21T18:14:30.950 に答える
6

1 か所でしか実行されないのに、なぜ関数とその実行を分離するのですか?

その場合、(オーバーヘッドを伴う) 関数を使用する理由はまったくありません。コードをインライン化するだけです。そして、関数名にコメントを隠さないでください。私はそれを悪い習慣と呼んでいます。誰かがコメントをコードから分離した場合、それはあなたのせいではなく、彼のせいです。実際、彼はあなたの IENFE にまったく関係のないものを詰め込むこともできます。

このパターンは、関数を (再帰的に) 再利用する場合や、何かの周りにクロージャを構築する必要がある場合に役立ちます。また、名前付き関数によってスタック トレースのデバッグが容易になりますが、IE にはさまざまなバグがあります。したがって、本当に必要ない場合は避けてください。

コメントがコードのブロックに適用されることを表現したい場合は、ブロックステートメントを明示的に使用して、コメントを先頭に置くことができます。

{ // hide Stuff on Instantiaton
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
}

…とはいえ、余分な IEFE と同じくらい読者を混乱させる可能性があります。

于 2013-03-21T15:57:05.423 に答える