ECMAScriptは、JavaScriptの標準規格を定義する仕様です。以下は、ECMAScriptの主なバージョンにおける変遷の要点です。
ECMAScript 1（1997年）:
最初のバージョンで、JavaScriptが初めて標準規格として定義されました。
ECMAScript 2（1998年）:
軽微な修正が加えられ、仕様が一部改善されました。
ECMAScript 3（1999年）:
大規模なアップデートで、try/catch文や正規表現、新しいエラーオブジェクトなどが導入されました。
ECMAScript 4が不採用となったため、このバージョンが長らく標準として使われ、ブラウザ上のJavaScriptエンジンや開発者の間で広くサポートされました。
ECMAScript 4（不採用）:
制定されず、中断された仕様です。このバージョンの仕様策定が難航し、その後の進展がなかったため、採用されませんでした。
ECMAScript 5（2009年）:
大規模なアップデートではなく、ECMAScript 3の改訂版としてリリースされました。
"use strict";
// strict modeでのコード
// ECMAScript 3
var obj = {};
// ECMAScript 5
var obj = Object.create(proto);
// ECMAScript 3
var data = eval('(' + jsonString + ')');
// ECMAScript 5
var data = JSON.parse(jsonString);
// ECMAScript 3
var boundFunction = functionToBind.bind(context);
// ECMAScript 5
var boundFunction = functionToBind.bind(context);
// ECMAScript 5
var obj = {
    get myProperty() {
        return this._myProperty;
    },
    set myProperty(value) {
        this._myProperty = value;
    }
};
// ECMAScript 5
var sealedObject = Object.seal(myObject);
ECMAScript 6（2015年） / ECMAScript 2015:
大規模な変更が行われ、クラス、アロー関数、let/const、プロミス、ジェネレータなど多くの新機能が導入されました。
モジュールシステムも正式に採用され、JavaScriptの言語機能が大幅に強化されました。
// ECMAScript 5
var x = function(x) {
    return x * 2;
};
// ECMAScript 6
const x = (x) => x * 2;
// ECMAScript 5
var counter = 0;
// ECMAScript 6
let counter = 0;
// ECMAScript 5
var self = this;
var func = function() {
    console.log(self);
};
// ECMAScript 6
const func = () => {
    console.log(this);
};
// ECMAScript 5
function MyClass() {
    // constructor
}
// ECMAScript 6
class MyClass {
    // constructor
}
// ECMAScript 5
// モジュールが標準でサポートされていないため、グローバルスコープで変数を使っていた
// ECMAScript 6
// モジュールを使ってコードを構造化
import { myFunction } from './myModule';
ECMAScript 6では、イテレータとジェネレータが導入されました。これにより、簡潔で効率的な反復処理が可能になります。
// ECMAScript 5
var arr = [1, 2, 3];
for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}
// ECMAScript 6
const arr = [1, 2, 3];
for (const item of arr) {
    console.log(item);
}
ECMAScript 2016（ES7）:
毎年の小規模なアップデートの方針が始まり、ES6の拡張として導入された機能がいくつかありました。
ECMAScript 2017（ES8）:
async/await、Object.values/Object.entries などが追加されました。
ECMAScript 2018（ES9）:
Rest/Spread Properties、Promise.prototype.finally などの新機能が導入されました。
ECMAScript 2019（ES10）:
Array.prototype.flat、Array.prototype.flatMap などが追加されました。
ECMAScript 2020（ES11）:
BigInt型やPromise.allSettledなどが導入されました。
ECMAScript 2021（ES12）:
String.prototype.replaceAll、WeakRef、FinalizationRegistryなどの新機能が導入されました。
ECMAScriptは現在も進化を続けており、毎年新しいバージョンがリリースされています。新しいバージョンでは、言語の機能やパフォーマンスが向上し、開発者がより効果的にコードを書けるようになります。
ECMAScript（European Computer Manufacturers Association Script）は、JavaScriptの標準規格を定義したもので、JavaScriptはこの規格に基づいて作られています。言い換えれば、JavaScriptはECMAScriptの実装の一つであり、ECMAScriptがJavaScriptの基盤となっています。
以下に、ECMAScriptとJavaScriptの関係について簡単に説明します。
ECMAScriptは標準規格:ECMAScriptは、欧州コンピュータ製造業者協会（ECMA）によって標準規格として策定された言語仕様です。ECMAScriptはバージョンごとに進化しており、新しい機能や構文が追加されます。
JavaScriptはECMAScriptの実装:JavaScriptは、ECMAScriptの実装の一つです。具体的には、WebブラウザやNode.jsなどで実行されるJavaScriptエンジンが、ECMAScriptの仕様に基づいて動作しています。JavaScriptはECMAScriptの標準仕様に従っていれば、さまざまな実行環境で動作することが期待されます。
ブラウザとECMAScript:Webブラウザでは、ECMAScriptに基づくJavaScriptエンジンが実装されています。各ブラウザ（Chrome、Firefox、Safariなど）は、独自のJavaScriptエンジンを使用していますが、これらは共通のECMAScriptの仕様に準拠しています。
ECMAScriptの進化とJavaScriptの実装:ECMAScriptは進化し続け、新しいバージョンが定期的にリリースされます。ブラウザやNode.jsはこれらの新しい機能や仕様の一部を実装し、JavaScript開発者はこれを利用してよりモダンで効果的なコードを書くことができます。
総じて、ECMAScriptはJavaScriptの基本的な仕様を定義する標準であり、JavaScriptはその標準に基づいた実装の一つです。JavaScript開発者はECMAScriptの仕様に注意しながらコードを書き、最新の言語仕様を利用して開発を進めることが一般的です。