なたで日記

いろいろな思ったこと書きますヽ(^▽^ゞ)

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

time 2018/10/06

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 の構文チェック的なツールを
入れた方がいいかもしれませんね。

コメントを残す




プロフィール

なたで

なたで

明るくて楽しいことが好きです!モノづくりや旅が趣味です!

RSS フィード RSS feed GitHub GitHub Twitter Twitter YouTube YouTube



sponsored link

タイムライン