ES6のletはvarから単純に置き換えできない

プログラミング
スポンサーリンク

はじめに

こんにちは、なたでです。

最近、レガシーなJScript対応をやめて、ES6のコードを書いています。
そんな中、ある問題に直面しました。

Chromeでは問題はないのに、Edge でスクリプトを
実行したところなぜか以下のエラーが出てしまう。

SCRIPT5022: Let/Const redeclaration

行数は表示されないので、どこか調べる羽目に・・・。

var から let への置き換えに問題あり

結論から言うと、
var から let への置き換えで
実はやってはいけないことをしてました。

どこかの記事で let へ単純置き換えが可能というのを見たので、
いけるかなと思ったら、注意点があるようですね。

今回見つけたものをここで紹介します。

引数を let にて再宣言

以下は、Chromeならエラーは出ませんが、
Edgeではエラーがでるスクリプトです。

let myFunc = function(arg) {
	let arg;
};

varなら問題はなかったのですけどね。

もちろん、以下のようにすれば、
Edge でエラーは発生しなくなります。

let myFunc = function(arg) {
	{
		let arg;
	}
};

ただし、当たり前ではあるがブロック内の定義なので
上のレベルのargを使用できなくなりますが。

switch 文の条件分岐内で let を使用

これもまた、Chromeならエラーは出ませんが、
Edgeではエラーがでるスクリプトです。

switch(x) {
case 1:
	let a = 1;
	break;
case 2:
	let a = 2;
	break;
}

これもまた、varなら問題がないスクリプトです。

switch 文では case文内にローカルブロックを記載して
ブロックスコープを作ったほうがいいかもしれませんね。

おわりに

というわけで、
問題がなかったコードを機械的にletに置き換えるのは危険です。

今回、NetBeans IDE でもエラーが出ないので、
調べるのにかなり時間をかけてしまいました。

なんか本格的な JavaScript の構文チェック的なツールを
入れた方がいいかもしれませんね。

コメント

タイトルとURLをコピーしました