2

これら 2 つのコード スニペットの意味上の違いは何ですか?

  • 例 1

    var x = (function () {} ());

  • 例 2

    var x = (function () {} )();

()記述上の違いは、JavaScript インタープリターにコード ブロックを一度に実行するように指示する括弧のペアを配置する場所です。技術的には、違いはありません。質問の言い回しを言い換えて「セマンティック」という言葉を削除する場合、新しい質問はすでに回答されており、ここで詳しく説明されています: https://stackoverflow.com/a/6645915/1268003

しかし、セマンティック部分は私のジレンマであり、このスレッドが光を当てることができることを願っています. それは「セマンティック」であるため、客観的な答えはありません.StackoverflowのFAQによると、私の質問は有効ではないという境界線上にあります. ただし、コメントで発生する可能性のあるこの質問の有効性については議論できます。とりあえず、先に進みましょう。

問題の定義

そこにいるすべてのJavaScriptユーザーの絶対的な大多数example 2は、を使用しているようです。実際、私はまだその規則の例外を 1 つも見つけていません (または、最近どこに行ったのでしょうか?)。特に jQuery プラグインの開発者は、次のようにコードを記述します。

私のバイブルであるJavaScript: The Definitive Guideでは、この慣行はまったく使用されていません。著者の David Flanagan はこれに固執していexample 1ます (ページ 249 は、著者がこの慣行についてコメントしている場所です)。

どの構成を気にする必要はありません。追加された括弧にはすべて、読みやすさを最大化するという 1の目的しかありません。明確にする。それでは、何を明確にしますか?

私の推理

JavaScript でクロージャを記述する場合、外部のコードからアクセスできないと想定されている関数でローカル変数を定義しています。ほとんどの場合、コンテキストにより、関数は識別子にバインドされていない匿名関数です。そのようです:

  • 例 4

    function () { var local = "Local variable!"; }

繰り返しますが、コンテキストと通常の慣習により、コードのスニペットを一度に実行したいと考えています。そのため、いくつかの括弧を挿入します。これにより、JavaScript インタープリターに関数を実行するように指示されます。

  • 例 5

    function () {} ()

コードでこれを明確にするために、いくつかの括弧を追加することをお勧めします。これにより、クロージャーも明確になります。

  • 例 6

    (function () {} ())

これは の正確なレプリカですexample 1。したがって、私の推論でexample 1は、それがコードを「書くべき」方法であると言えます。を使用することを選択するときはいつでもexample 2、匿名関数がすぐに実行されるという事実ではなく、クロージャーの使用のみを明確にします。しかし、コード スニペット全体の外側に明確化括弧を配置するための最小限の努力で、両方をキャッチできます。

はい、私は自分の推論を批判できます。ではexample 3、「ねえ、外部参照が内部のエイリアスにコピーされている」と考えるのは魅力的です。別の方法:

  • 例 7

    (function ($) {} (jQuery))

..この点に関しては明確ではありません。ただし、example 2この値渡し手法は使用しません。個人的には、私がクロージャを書くとき、ほとんどの場合、何も渡す必要はありません。それでも、原理主義者であることを許されるとしても、jQuery プラグインの実践では、匿名関数の即時実行が明確になることはありません。

例 1 ユーザー

私の推論が正しいとすれば、コミュニティ全体が を使用するのはなぜexample 1ですか? 2 つの説明のうちの 1 つだけをキャストするという彼らの唯一の意図はありますか? ひょっとしたら、彼らには目的すらなく、私たちが説明できない目的の単なる伝統に従っているのではないでしょうか? 私はまだ jQuery プラグインを作成したりexample 2、聖書を読んでキャリアを始めたので使用したりしていません。example 1しかし、あなたがそれを使用し、その理由を持っている多くの人の中にいる場合は、共有してください =)

4

1 に答える 1

1

なんで?可読性

「読みやすさ」をモットーに、多くのことがコードで行われます。コードを書く上で非常に貴重です。あなたのコードは、他の開発者に簡単に継承されるべきです。

一つ忘れた

または、いわばゼロです。

  • 例 0

    var x = function(){ }();
    

    そして、これが人々がそれを使わない理由です: 読みにくいからです。通常、これらの閉鎖は非常に大きく、非常に速くなります。誰かがクロージャーの最後までたどり着いて、それが自己実行のない x という名前の単なる変数であることを判断する必要はありませんvar x = function(){};。このため、開発者は自己実行クロージャーを括弧でラップしました: var selfExecuting = (function(){})();、または単純(function(){})();に1行目から、これが自己実行であることは明らかでした。また、次のような関数に遭遇した場合、var notExecuting = function(){};通常、1 行目で自己実行ではないと想定できることも意味します。

    コーディングにおいて読みやすさは非常に重要です。メンテナンスには重要です。一貫性が重要です。資料として重要です。

    ただし、開発コードは製品コードであってはならないことに注意してください。

  • 于 2012-10-05T04:26:40.197 に答える