良い先端を作るには知っていなければならないこと--JS言語

3800 ワード

プログラミング言語は様々な方法で様々なタイプに分けられますが、JSがどのようなタイプの言語に属しているかを見てみましょう.
解釈型言語
コンパイル実行プロセスによって、コンパイル言語と解釈言語に分けることができます.たとえば
  • c言語では、まずコンパイルしてターゲットファイルを生成し、各ターゲットファイルとライブラリファイルをリンクして実行可能ファイルを生成する必要があります.
  • Java,scalaは,まずバイトコードにコンパイルし,実行バイトコードを解釈する(コンパイル言語としても解釈言語としても理解できる).正確な理解では、javaはコンパイル型言語であり、ソースコード全体がバイトコードにコンパイルされ、javaバイトコードは解釈型言語である.
  • Pythonは解釈型言語ですが、まずコンパイルしてpythonのバイトコードにコンパイルすることもできます.
  • Javascriptは解釈型言語です.現在、js全体を直接コンパイルしてから実行していないようです(jsのダイナミック性が強すぎて、まず全体のコンパイルが難しすぎて、実行性能が説明より実行が高いと言われています).

  • ⚠️注意:解釈型言語もコンパイルする必要があります.コンパイル言語と解釈言語を区別するのは、ソースコードがターゲットコードに全体的にコンパイルされて実行されるか、または実行されるかを見ることです.従来のコンパイル言語では、コンパイル手順は、文法分析、文法分析、意味検査、コード最適化、バイト生成に分けられます.しかし,解釈型言語では,文法解析と文法解析により文法ツリーを得た後,解釈実行を開始することができる(文法ツリーとシンボルテーブルからマシンコードを生成する).これは、jsが実行を解釈し、1つの文を読んで実行するとなぜ言われているのかを説明していますが、実際にはjsでまだ実行されていないコード構文エラーがjs全体が実行されないという問題を引き起こしています.例:
    console.log('   console  ');
    = //                     

    実はjs変数が上昇する現象も明らかにjsが先にコンパイルしてから実行するブラウザの中で、複数のラベルの中のjsコードは、セグメントコンパイルされている(したがって、ある<script>ラベルの中の文法エラーは別の<script>の中のコードが実行されない)が、グローバルオブジェクトは共有されていることを証明している.</p>
    <h1>動的言語</h1>
    <p>言語別変数のタイプ別コンパイル時に決定するか、実行時に決定するかは、静的言語と動的言語に分けることができます.例えば</p>
    <ul>
    <li>java,<code>String s = null;</code> 変数sのタイプはコンパイル時に文字列タイプとして決定できます.</li>
    <li>python、変数は宣言する必要はありません.変数のタイプは、最初に値を割り当てるときに値のタイプによって決定されます.</li>
    <li>js,<code>let val;let = ‘1’;</code> 変数valは、val='1'を実行するときに文字列タイプとして決定されます.</li>
    </ul>
    <h1>弱いタイプの言語</h1>
    <p>変数のタイプによって実行時に変更できるかどうかは、強いタイプの言語と弱いタイプの言語に分けられます.例えば</p>
    <ul>
    <li>Java、scalaは強いタイプの言語で、変数が宣言されると、そのタイプは後で変更できません.</li>
    <li>Pythonは強いタイプの言語です.</li>
    <li>Jsは弱いタイプの言語です.例えば<code>let v = ‘1’;v=1;v=true;</code>これはjsでは合法的です.</li>
    </ul>
    <h1>非常に柔軟な言語</h1>
    <p>言語パターンによって宣言式、コマンド式、関数式言語に分けることができます.</p>
    <ul>
    <li>宣言的なプログラミングは、どのようにするかではなく、コンピュータに何をするかを教えます.より高いレベルでコードを書くには、下位アルゴリズムの実現過程ではなく、目標に関心を持っています.例えばcss、正規表現、sql文、html、xml...</li>
    <li>コマンドプログラミングは、私が何をしたいかにかかわらず、コンピュータにどのようにするかを教えます.ある問題を解決する具体的なアルゴリズムを実現する.例えばjava、c.</li>
    <li>関数式プログラミングは,計算機演算を数学における関数の計算と見なし,状態や変数の概念を回避する.lt;/li>
    </ul>
    <p>多くの言語は単純にあるパターンをサポートするのではなく、java 8のように関数式のサポートも一部追加されています.<br><strong>jsは非常に柔軟な言語で、コマンド式と関数式のプログラミングをサポートしています.</strong></p>
    <h1>様々な言語の長所と短所</h1>
    <ul>
    <li>一般的なコンパイル言語は解釈言語よりも性能が高い.しかし、コンパイル型言語ではまずコンパイルが必要です.</li>
    <li>解釈型言語の利点は、オンラインに配備されているのはソースコードであり、オンライン環境のコードを直接修正し、いくつかのバグを解決することができることです.例えば、オンラインのjsコードを直接変更することがあります.</li>
    <li>コンパイル言語は通常xmlでプロファイルを作成します.コンパイル後のバイトコードは変更されないからです.解釈型言語の構成は、ソースコードに直接書くのが便利で、xmlで構成すると余計に見えます.</li>
    <li>静的言語で、コンパイル時のチェックに役立ちます.たとえばjava、ideでオブジェクトの存在しない属性付与は、コンパイル時にエラーをチェックできます.</li>
    <li>Jsは動的言語です.オブジェクトのプロパティが存在するかどうかは、コンパイル時に確定できません.これにより、いくつかのエラーが実行時に検出される可能性があります.だから普通<strong>jsプログラムの正確性は、ユニットテスト保証</strong>.</li>
    <li>強いタイプ言語は、宣言後にタイプが変更されないため、コンパイル時のタイプチェックを実現できます.動的言語と弱い言語は、より柔軟で、同じ機能を実現するコード量が通常より少ないか、複雑な機能を実現しやすい.もちろん、可読性の維持性は静的言語や強いタイプの言語に及ばない.</li>
    </ul>
    <blockquote>
    この文書は、元同僚@zhoujiapingの共有から整理されています.
    </blockquote>
    </div>
    </div>
    </div>
    </div>
    <!--PCとWAPの適応版-->
    <div id="SOHUCS"sid="1175106212576964608"></div>
    <script type="text/javascript"src="/views/front/js/chanyan.js">