正確には、ECMAScriptという標準のMozilla実装
実行時に型が決定される言語
💡ダックタイピング・・型ではなく振るまいとして動作を期待する方式
💡静的型付けかつ型推論を持つクラスベースのTypeScriptをマイクロソフトが開発したのはなぜか?
プロトタイプを定義して、それを元にプロトタイプチェーンを作成する
Person { name: "Mike", age: "21" }
Student { student_id: "20T5054A" }
UniversityStudent { society: "Poet" }
💡nameを変えると全部のチェーンが影響を受けるので、これはプロトタイプの悪い例
プリミティブ(数値、ブール値、文字列)以外はすべてオブジェクト参照
変数/関数が有効な範囲、生存期間を意識する
JavaScriptインタプリタは2パスで動作する
function hiyoko() {
let piyo = 'piyopiyo'
console.log(piyo)
return piyo
}
function hiyoko() {
console.log(piyo) // 宣言前に
let piyo = 'piyopiyo'
return piyo
}
function hiyoko() {
let piyo
console.log(piyo)
piyo = 'piyopiyo'
return piyo
}
let global_var = 'Global'
console.log(global_var)
function hoge() {
console.log(global_var)
function piyo() {
console.log(global_var)
}
}
let global_or_local = 'Global'
console.log(global_or_local)
function hoge() {
let global_or_local = 'Local'
console.log(global_or_local)
function piyo() {
let global_or_local
console.log(global_or_local)
}
}
let/const/varなしで定義された関数内の変数はグローバル変数扱いになる
function hoge() {
state = 'Waiting'
return {state}
}
💡定義時は明確にlet/constを指定する
💡{state}は{state: state}に翻訳される。ただし、IEだと{state: ''}となったので注意
let people = () => {
let name = 'Takeda'
return {name: name}
}

💡意図してクロージャーにしないと無駄に参照が残ったり、値の書き換えの影響がでる
💡よいJavaScriptライフを!