JavaScriptをStrictモードで書き換える場合、エラーとなった場合をまとめたいと思います。
Strictモードの記載
"use strict";
変数の宣言はアクセス修飾子(?)必須
変数の宣言には、const、let、varが必須です
before.js
"use strict";
test = "";
//Uncaught ReferenceError: test is not defined
for (i = 0; i < length; i++) {}
//Uncaught ReferenceError: i is not defined
after.js
"use strict";
const test = "";
for (let i = 0; i < length; i++) {}
イベントリスナの削除
イベントリスナの削除にはremoveEventListenerを利用しますが、無名変数を利用していて、リスナしているイベントを1度だけ処理したい場合は、第二引数にarguments.calleeを指定していました。Strictモードでは、これができません
before.js
"use strict";
obj.addEventListener( "mousedown" , function (e) {
var inner = "abc";
obj.removeEventListener("mousedown", arguments.callee, false);
}, false);
//Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
after.js
"use strict";
obj.addEventListener( "mousedown" , function func (e) {
var inner = "abc";
obj.removeEventListener("mousedown", func, false);
}, false);
HTML5がまだ普及していなかった時代、XHTMLをstrictで書いていました。XHTMLをstrictモードで書く場合、JavaScriptも同様に厳密な解釈となったように記憶しています。想定外の動きを減らすため、strictで書くべきですよね。以上!