なぜJavascriptはシングルスレッドかつ非同期通信なのか

http://indori.blog32.fc2.com/blog-entry-1298.html
同じ理由でJavascriptもシングルスレッドなのだと思う。

シングルスレッドだとファイルの読み込みなどの重い処理をしたときに次の処理まで長い待ち時間が発生しうる。
それだと使い者にならないので、そのような処理は処理を投げる(ファイル読み込みの場合はhttpリクエストをブラウザに投げる)ことだけをまず行い、イベントループにでぶち込んで他の処理を行う(他の処理も同じようにイベントループにぶちこむ)。

イベントループを監視してる最中に、その処理が終わっていたらFIFOでコールバック関数を実行する。
これが現実的な解決方法であり、非同期処理そのものだ。

SAOでファイルアップロードの際の注意

ページ遷移せずに2回目のファイルアップロードをしようとした場合、ブラウザによっては失敗することがある。

これは、input タグのvalue に既に値が入っていることが問題なので、以下のようにリセットすれば正常に動作する。

document.getElementById(“target_id”).value = “”;

jQueryなら以下。

$(“#target_id”).val(“”);