LoginSignup
5
6

More than 5 years have passed since last update.

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

Posted at

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

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6