为什么JavaScript会这样?

时间:2017-12-21 07:47:15

标签: javascript arrays

var highScore = 0是否与循环分开? scores[i]始终不是greater than 0吗?我需要有人来分解if语句是如何工作的,我需要了解highScore = scores[i]如何给我回到最高的数字。这个练习出现在我正在阅读的一本书中,以学习JavaScript,我觉得这是我的想法。谁能摆脱光明?谢谢。

if语句如何在此代码中运行?如果它的值为0,那么highScore如何作为在if语句中使用的变量相关?它突然输出值似乎是合乎逻辑的数组中的最大数字。

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];
    }
}

5 个答案:

答案 0 :(得分:2)

问题在于:

    if (scores[i] > highScore){
    **var highScore = scores[i];**
}

您只需将其更改为:

    if (scores[i] > highScore){
        highScore = scores[i];
}

一切都应该完美。

答案 1 :(得分:2)

var highScore您正在

中重新初始化
if (scores[i] > highScore){
    var highScore = scores[i];
}

删除var将添加到全局highScore

答案 2 :(得分:2)

if (scores[i] > highScore){
    var highScore = scores[i];
}

如果索引的分数大于highScore(起始值为0),则会将highScore重新分配给该值。

所以基本上,假设数组的第一个索引高于0,这是因为它是60 - 这是新的高分。

然后,在索引1为50时,再次运行:

if (scores[i] > highScore){
    var highScore = scores[i];
}

50岁高于60岁吗?不,因此,highScore保持在60的值。依此类推。

编辑:

但是您的代码错误,您在范围内创建了一个新变量highScore。您需要重新分配初始变量。

因此,

highScore = scores[i];

答案 3 :(得分:2)

我认为你对变量的范围感到困惑。如果您在程序中使用关键字<ion-list margin-top> <ion-item> <ion-label> <ion-icon name="person"></ion-icon></ion-label> <ion-input [(ngModel)]="userData.fullname" value="{{fullname}}" type="text"></ion-input> </ion-item> <ion-item> <ion-label> <ion-icon name="md-phone-portrait"></ion-icon></ion-label> <ion-input [(ngModel)]="userData.phone" value="{{phone}}" type="text"></ion-input> </ion-item> <ion-item> <ion-label> <ion-icon name="md-mail"></ion-icon></ion-label> <ion-input [(ngModel)]="userData.Email" value="{{Email}}" type="text"></ion-input> </ion-item> <ion-item> <ion-label> <ion-icon name="md-megaphone"></ion-icon></ion-label> <ion-textarea [(ngModel)]="userData.Deskripsi" value="{{Deskripsi}}" type="text"></ion-textarea> </ion-item> <ion-item> <button ion-button color="secondary" (click)="update();" float-right>Update</button> </ion-item> </ion-list> 声明变量,它将视为全局范围。这意味着您可以在程序的任何位置访问更新的值。这就是为什么它在for循环执行后给出最高数字作为输出。由于这个原因,您的代码将正常运行。DEMO HERE。您可以将输出69视为警报。如果您从

更改代码,请在代码中假设
var

   if (scores[i] > highScore){
    var highScore = scores[i];
   }

现在您没有获得最大数字,它会提醒值 if (scores[i] > highScore){ let highScore = scores[i]; } ,因为变量0声明为highScore,它将被视为块级范围不是全球范围。 DEMO HERE。因此,当您在for循环之外放置警报时,它将从全局范围let varibale获取值。

我希望你现在可以很容易地理解if条件是如何工作的。

答案 4 :(得分:1)

Javascript工作得非常好。 您已初始化highScore两次。

这是变量的简单范围。

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)
        }
    }

当您使用var进行变量声明时,它将成为一个全局变量,这是您获得数组最高值的原因。

尝试使用阻止范围

的let(代替两个)

希望这有帮助