TypeScriptのシャドーイングは本当にDouble-edged sword

TypeScriptのシャドーイングは本当にDouble-edged sword

TypeScriptではネストされたスコープで変数宣言するシャドーイングという機能?があるようで、偶発的なバグを防いでくれるんだそうです。

for(let i=0;i<5;i++){// 外側のiと内側のiは別物になる、これがシャドーイング
  console.log('outline:',i);
  for(let i=0;i<5;i++){
    console.log('inline:',i);
  }
}

が、これはハンドブックにも書かれている通りDouble-edged sword(諸刃の剣)です。変数が正しく加算されるようですが、そもそもどのように動作すれば正しいのか。。

トランスパイルすると内側の変数名がi_1に変わっているのです。

for (var i = 0; i < 5; i++) {
  console.log('outline:', i);
  for (var i_1 = 0; i_1 < 5; i_1++) { // 変数名が勝手に変わっている
    console.log('inline:', i_1);
  }
}

ということである種のバグを防ぐものの、別のバグを生みそうです。

ネストしたfor文のインクリメント変数はあえて別名にしておく方が無難な気がします。

TypeScriptのシャドーイングは本当にDouble-edged sword

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

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