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文のインクリメント変数はあえて別名にしておく方が無難な気がします。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント