Why does JavaScript behave this way?
变量
if语句如何在此代码中工作?如果highscore的值为0,那么highscore作为一个变量在if语句中的使用情况如何?突然输出值是数组中最高的数字似乎不符合逻辑。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var scores = [60, 50, 60, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 61, 46, 31, 57, 52, 44, 18, 41, 53, 55, 61, 51, 44]; var highScore = 0; for (i = 0; i < scores.length; i++) { output ="Bubble #:" + i +" scores:" + scores[i]; console.log(output); if (scores[i] > highScore){ var highScore = scores[i]; } } |
我认为你对变量的范围感到困惑。如果在程序中的任何地方用关键字
1 2 3 | if (scores[i] > highScore){ var highScore = scores[i]; } |
到
1 2 3 | if (scores[i] > highScore){ let highScore = scores[i]; } |
现在,您不会得到最大的数字,它将警告值
我希望现在你能很容易地理解if条件是如何工作的。
1 2 3 | if (scores[i] > highScore){ var highScore = scores[i]; } |
如果分数i'th指数大于高分(起始值为0),则将
所以本质上,假设数组的第一个索引大于0,这是因为它是60——这是新的高分。
然后,在索引1(50)处,再次运行:
1 2 3 | if (scores[i] > highScore){ var highScore = scores[i]; } |
50比60高吗?不,因此,
编辑:
然而,您的代码是错误的,您正在范围内创建一个新的变量
因此,
1 2 3 | if (scores[i] > highScore){ var highScore = scores[i]; } |
删除它将添加到全局
问题在于:
1 2 3 | if (scores[i] > highScore){ **var highScore = scores[i];** } |
您只需将其更改为:
1 2 3 | if (scores[i] > highScore){ highScore = scores[i]; } |
一切都应该工作得很好。
javascript工作得很好。您已初始化
这是变量的简单范围。
1 2 3 4 5 6 7 8 9 10 11 12 | var highScore = 0; for (i = 0; i < scores.length; i++) { output ="Bubble #:" + i +" scores:" + scores[i]; console.log(output); if (scores[i] > highScore){ var highScore = scores[i]; // ---- (2) } } |
当您使用
尝试使用具有块范围的let(代替两个)。
希望这有帮助