search
LoginSignup
6
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

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

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

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
What you can do with signing up
6
Help us understand the problem. What are the problem?