javascriptの解析実行順序は各ブラウザで異なります.

3213 ワード

概要
javascriptは解釈型の言語で、実行はトップダウンです.しかし、各ブラウザの「上から下へ」の理解は微妙に違っています.コードの上下、つまりプログラムフローは正確に実行するために重要です.だから、私たちはjsの実行順序を深く理解する必要があります.このために,次の8つの実験を設計して,最も正確な結果を得た.
実験
 
  
<br>// : <br>function t(a) <br>{ <br>alert("[t(a)]a:" + a); <br>} <br>function t(a, b) <br>{ <br>alert("[t(a, b)]a:" + a + ", b:" + b); <br>} <br>t(1); <br>// : <br>//[t(a, b)]a:1, b:undefined <br> <br>// : <br>function t(a, b) <br>{ <br>alert("[t(a, b)]a:" + a + ", b:" + b); <br>} <br>function t(a) <br>{ <br>alert("[t(a)]a:" + a); <br>} <br>t(1); <br>// : <br>//[t(a)]a:1 <br> <br>// : <br>function t(a) <br>{ <br>alert("[t(a)]a:" + a); <br>} <br>function t(a, b) <br>{ <br>alert("[t(a, b)]a:" + a + ", b:" + b); <br>} <br>t(1, 2); <br>// : <br>//[t(a, b)]a:1, b:2 <br> <br>// : <br>function t(a, b) <br>{ <br>alert("[t(a, b)]a:" + a + ", b:" + b); <br>} <br>function t(a) <br>{ <br>alert("[t(a)]a:" + a); <br>} <br>t(1, 2); <br>// : <br>//[t(a)]a:1 <br> <br>// <br>function t(a) <br>{ <br>alert("[t(a)]a:" + a); <br>} <br>t(1); <br>function t(a, b) <br>{ <br>alert("[t(a, b)]a:" + a + ", b:" + b); <br>} <br>// : <br>//[t(a, b)]a:1, b:undefined <br> <br>// <br>function t(a) <br>{ <br>alert("[t(a)]a:" + a); <br>} <br>t(1, 2); <br>function t(a, b) <br>{ <br>alert("[t(a, b)]a:" + a + ", b:" + b); <br>} <br>// : <br>//[t(a, b)]a:1, b:2 <br> <br>// <br>function t(a, b) <br>{ <br>alert("[t(a, b)]a:" + a + ", b:" + b); <br>} <br>t(1); <br>function t(a) <br>{ <br>alert("[t(a)]a:" + a); <br>} <br>// : <br>//[t(a)]a:1 <br> <br>// <br>function t(a, b) <br>{ <br>alert("[t(a, b)]a:" + a + ", b:" + b); <br>} <br>t(1, 2); <br>function t(a) <br>{ <br>alert("[t(a)]a:" + a); <br>} <br>// : <br>//[t(a)]a:1 <br> <br>
後記
javascript関数を定義する場合、関数名は関数オブジェクトの識別です.パラメータの数はこの関数の属性だけです.パラメータの数を定義する関数によって重荷重を達成することはできません.
関数を呼び出した場合、jsは関数名を通じて対応する関数オブジェクトを見つけ、関数によって定義されたパラメータと、式パラメータリストを順番に合わせ、余分なパラメータを切り捨て、足りないパラメータをundefinedで処理し、関数コードを実行します.
したがって、関数を定義するときは、通常はパラメータリストの一番前に必須パラメータを置いて、オプションパラメータは必須パラメータの後ろに置いています.
注意事項
上記の8つの実験の結果は360ブラウザ(バージョン/カーネル:6.3.1.142/21.1180.89)とフォックスブラウザ(バージョン:27.0.1)を通じて実行された.
上記の8つの実験は互いに独立しています.それぞれ単独で運行して正しい結果を得てください.