

javascriptの標準仕様ということはなんとなく理解しています。  
javascriptはブラウザ毎に実装されているのですよね？ 最近のブラウザで動くjavascriptのECMAScriptのバージョンは何なのでしょうか？

たとえば、ネストされた関数内でのthisはグローバルオブジェクトを指しますが、ECMAScript5では修正されているそうです。  
そうなるとECMAScript5環境では既存のコードの動きは変わってしまうのでしょうか？

ご教授お願いします。


CC BY-SA 3.0
2016-02-01T11:51:34.020
21577
2016-02-02T05:56:59.030
12961
question
javascript
ECMAScriptの概念がわかりません。


[IE9以上を含む大半のブラウザは](https://ja.wikipedia.org/wiki/ECMAScript#ECMAScript.E3.81.AE.E6.96.B9.E8.A8.80.E3.81.8A.E3.82.88.E3.81.B3.E3.81.9D.E3.81.AE.E5.91.BC.E7.A7.B0)2011年に発行された
ECMAScript 5.1 に準拠し、昨年発行されたECMAScript 2015
も最新版のブラウザであればだいたいの機能が使える、といった状況かと思います。

ECMAScript 2015 (ECMAScript6) の対応表  
<http://kangax.github.io/compat-table/es6/>

> ネストされた関数内でのthisはグローバルオブジェクトを指しますが、ECMAScript5では修正されているそうです。

`this` に何も割り当てられない状況ではグローバルオブジェクトがセットされていたのが、 `undefined`
になるという挙動のことでしょうか？この変更は `"use strict";`
を書いたStrictMode下に限定されているため、それよりも古いコードとの間で互換性問題が起きないようになっています。前述のとおり、現在の大半のブラウザはこの挙動を含め
ECMAScript 5.1 に準拠していますしね。

同様に、ECMAScript 2015 も高い後方互換性を持つよう設計されています。ECMAScript 5.1 の範疇に関して言えば、ECMAScript
2015 対応のブラウザで問題になることはありません。  
（ブラウザごとの独自実装に依存している場合は当然この限りではありませんが、そのような機能を使ったコードはそもそもブラウザ間で互換性問題が起きているか、それを踏まえて対策されているかのどちらかでしょう）

関連質問： ["use strict" と ECMAScript6
の関係性について](https://ja.stackoverflow.com/q/18382/8000)


CC BY-SA 3.0
2016-02-01T12:37:34.643
21580
2016-02-01T12:37:34.643
2017-04-13T12:52:39.113
-1
8000
21577
answer


HTML5周辺技術やCSSにも言えることですが、  
近年今実装されているバージョンは何かということは言えない、言わない状態になっています。  
Webの技術というのは原則後方互換性を保って仕様が追加して行かれるものです。  
つまり、バージョンを丸ごと一気に実装して移行する必要はなく、  
バージョンに関係なく各ブラウザベンダーが重要視する技術から随時実装されていっている状態なのです。  
例えばES2015の実装はまだどのブラウザでも完了していませんが、既にES2016やES2017proposalの実装が始まっています。  
また、仕様自体もLiving Standardといったバージョンに拘らないものが出たり、ESコアも実質それに近い状態のものへと変化してきています。

よって使う側としてはバージョンは気にしないで、どの機能が実装されているかということに注目するのが現在の良いやり方です。


CC BY-SA 3.0
2016-02-02T05:13:28.487
21609
2016-02-02T05:56:59.030
2016-02-02T05:56:59.030
5721
5721
21577
answer