Help us understand the problem. What is going on with this article?

JavaScriptをStrictモードに書き換える

More than 3 years have passed since last update.

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で書くべきですよね。以上!

kaikusakari
I'm noob.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away