はじめに
こんにちは、なたでです。
最近、レガシーな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 の構文チェック的なツールを
入れた方がいいかもしれませんね。
コメント