0

Here it seems the for cycle executes the console.log(" floors["+i+"]: " + floor.floorNum()) line only, cycles through all 5 elements without calling the rest of the code, and after it finishes, only then the floor.on("up_button_pressed", function() is called.

What is exactly happening, so I can fix it?

enter image description here

Source: https://play.elevatorsaga.com/#challenge=2

{
    init: function(elevators, floors) {
        var elevator = elevators[0]; // Let's use the first elevator

        // Whenever the elevator is idle (has no more queued destinations) ...
        elevator.on("idle", function() {
            elevator.goToFloor(2);
            console.log("goToFloor 2 (because idle)")
        });
        elevator.on("floor_button_pressed", function(floorNum) { 
            elevator.goToFloor(floorNum); 
            console.log("goToFloor " + floorNum + " (because floor_button_pressed)")
        } );
        console.log("floors: " + floors)
        for (i = 0; i < floors.length; i++) {
            var floor = floors[i]; 
            console.log("    floors["+i+"]: " + floor.floorNum())
            floor.on("up_button_pressed", function() {
                elevator.goToFloor(floor.floorNum()); 
                console.log("goToFloor " + floor.floorNum() + " (because up_button_pressed)")
            } );
            floor.on("down_button_pressed", function() {
                elevator.goToFloor(floor.floorNum()); 
                console.log("goToFloor " + floor.floorNum() + " (because down_button_pressed)")
            } );
        }
    },
    update: function(dt, elevators, floors) {
        // We normally don't need to do anything here
    }
}
WurmD
  • 1,231
  • 5
  • 21
  • 42

1 Answers1

1

instead of var, use let because of JavaScript closure inside loops – simple practical example

WurmD
  • 1,231
  • 5
  • 21
  • 42