0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【本格的にJavaScriptを学ぶ】歴史編

Last updated at Posted at 2022-12-05

はじめに

Javaの簡単な開発経験はあるもの、今のJavaScriptの現場で悪戦苦闘中。。。
本格的にJavaScriptを学ぶ必要があったので、アウトプットします。
気軽にコメントしていただいたり、間違えていることなどあれば気軽にご指摘ください。
励みになります。

【参考】自分のスペック

現時点(2022年12月現在)でのスペックです。

  • IT経験3年
    • 大学中退し、1年間求人広告の営業 → 未経験からSESへ
    • 2019年11月からエンジニアとして現場に参画(2019年8月から3ヵ月は研修期間)
    • システム運用(開発なし):1年
    • テスター:半年
    • 設計:4ヵ月
    • 開発(Java):半年
    • 開発(JavaScript):半年
    • 要件定義:2ヵ月
  • 資格:JavaGold SE8 (2020年3月)

なぜ歴史を学ぶのか

JavaScript自体が現在も発展途上ですし、歴史的経緯のせいで出きた仕様があったりします。

これらは

古い既存のソースコードの解読を助ける

用語の理解

などに役に立つと考えています。

【JavaScriptの歴史】ポイント

今回は自分が重要と思ったポイントのみを、備忘録として記載していきます。

【1990年代】もともとはブラウザに複雑な動きを加えるために開発された

ブラウザ(今でいうChromeやSafariなど)がない = 動かなかった

  • ブラウザはJavaScriptエンジンを搭載している
    • JavaScriptエンジンはJavaScriptを動かせる環境
    • なので、なんの設定もしていないPCのコマンドプロンプトやターミナルでJavaScriptの記述をしても動かない

言語が柔軟に解釈する = 開発も楽になるやろ、的な発想でつくられた

  • この柔軟性のせいで、バグが生まれやすくなった。なんてこったい。
    • 変数の巻き上げや、undefinedが存在する意味

JavaScriptの担当外の処理→非同期処理の仕様にした

  • 動作はすべてシングルスレッド
    • 処理を一つ一つ順番に対処する
  • 重い処理で画面が真っ白になる時間を短くする
    • 画面が真っ白の状態で待たされて、イライラしてしまうのを防ぐ
  • 他に任せてる間に自分の仕事を行う = 非同期処理
    • 普通は書いた順に上から実行される = 同期処理 (想像通り)
    • 【イメージ】電子レンジで温めている(非同期処理)最中に、皿洗いをする
  • JavaScript担当外の処理:タイマー系/ 画像読み込み/API呼び出し...etc

【1990年代後半 ~ 2000年代前半】いろんな思惑で、JavaScriptの仕様がまとまらない

ブラウザ毎に好き勝手にJavaScriptの仕様を決めていた

  • ブラウザの互換性がなかった
    • ブラウザ毎にJavaScriptの仕様が異なっていた

JavaScript = コアな機能 + 各ブラウザの機能 をまとめたもの

  • ECMAという標準化団体が、JavaScriptの標準化(ECMAScript)を作成していたが、第4版から各企業の意見が分裂した
  • 各種ブラウザ専用のコードを書く必要があったとか。。。。

【2009年】Node.js 爆誕! でサーバサイドにも普及

サーバでもJavaScriptエンジンが動くようにすればいいんじゃね?的な天才的な発想で誕生

  • シングルスレッド + 非同期処理 = 高速に処理ができる(待ち時間が少なくなる)

Node.jsのJavaScript環境 = コアな機能 + CommonJs

  • 当時はJavaScriptで大規模な開発を行う想定ではなかったので、機能毎にファイルを分割する仕組みがなかった
    • CommonJsでは上記の機能 = モジュールが追加された
    • CommonJsではほかにも様々な機能がある

【2015年】JavaScriptのコアな機能がようやく標準化

ECMAScriptがようやくまとまる

  • JavaScriptのコアな部分が統一され、様々な便利機能がECMAScriptに追加される
    • 俗に言うES6(ES2015)

ECMAScriptはNode.jsの影響も受けている

  • Node.jsのCommonJSの機能とECMAScriptの機能が重複している箇所がある
  • 以下例
    • CommonJSのモジュール機能(CJS)とECMAScriptのモジュール機能(ESM/ES Module)

まとめ

  • ブラウザで複雑な動きをつけるために開発されたが、現在はそれに留まらず様々な場面で使用される
  • JavaScriptは実行環境(ブラウザとNode.jsなど)によって、使える機能が異なる

ECMAScriptの仕様

【そのほか】JavaScriptエンジンの種類

該当の記事に記載がありますが、
これを覚えておくとブラウザのテストケースが省略できることがあるので便利です。

ちなみに、NodeJsのJavaScriptエンジンは

  • V8エンジン(Chromeなどと同様)

を採用しています。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?