#解決
グローバルスコープでも以下のように修正して解決しました。
"/3[0-9]/g" → "/3[0-9]/"で解決しました。
#問題
変数regをグローバルスコープに設定
sample.js
let reg = /3[0-9]/g;
for(let i = 1; i < 101; i++) {
if(reg.test(i)) {
console.log(i + "は10の位が30の数字だよ!!");
} else if(i % 3 == 0 ) {
console.log(i + "は三で割り切れるよ!!");
}else {
console.log(i);
}
}
#結果
30は10の位が30の数字だよ!!
31
32は10の位が30の数字だよ!!
33は三で割り切れるよ!!
34は10の位が30の数字だよ!!
35
36は10の位が30の数字だよ!!
37
38は10の位が30の数字だよ!!
39は三で割り切れるよ!!
ローカル変数iの10の位が30の時に所々、期待した出力値が出ない。
例( i = 31の時"31は10の位が30の数字だよ!!"と出力されて欲しいが"31"と出力される。)
原因はforループの処理速度にによるグローバル変数regを参照する速度が追いついていないのか?
と考えたので変数regをブロックスコープに設定。
※javascriptには"スコープチェーン"と言う概念がある。
この概念によると、javascriptは狭いスコープに位置する変数を優先して参照するらしい。
sample.js
for(let i = 1; i < 101; i++) {
let reg = /3[0-9]/g;
if(reg.test(i)) {
console.log(i + "は10の位が30の数字だよ!!");
} else if(i % 3 == 0 ) {
console.log(i + "は三で割り切れるよ!!");
}else {
console.log(i);
}
}
#結果
30は10の位が30の数字だよ!!
31は10の位が30の数字だよ!!
32は10の位が30の数字だよ!!
33は10の位が30の数字だよ!!
34は10の位が30の数字だよ!!
35は10の位が30の数字だよ!!
36は10の位が30の数字だよ!!
37は10の位が30の数字だよ!!
38は10の位が30の数字だよ!!
39は10の位が30の数字だよ!!
#PS
やはり変数の参照速度の遅延が原因なのか??
わかる方、是非ご教授ください。