Molly Thama
Molly Thama

Reputation: 35

Breaking out of JavaScript 'For' Loop using False?

I didn't know this was possible (is it?)

The below code apparently logs values 1 to 5, then breaks out of the 'for' loop, because the 'false' value is returned.

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) return false;
    }
    return true
}

console.log(x());

My question is:

Upvotes: 2

Views: 18504

Answers (5)

Šarūnas Guobis
Šarūnas Guobis

Reputation: 36

If you do not want mess with return or break statements, you can add just one boolean flag. In my example i use isFound flag to run loop until your requirements are meet or end of array.

const arr = [1,2,3,4,5];

for(let i = 0, isFound; !isFound; i++){
  if(i >= 3 || i >= arr.length){isFound = true;}
  else { console.log(arr[i]);}
}

So the output will be:

1
2 
3 

Upvotes: 1

OliverRadini
OliverRadini

Reputation: 6467

The return statement ends the function , so the return true line is unreachable. Hope that helps.

Upvotes: 2

Viraj Nalawade
Viraj Nalawade

Reputation: 3227

The loop will never be executed till 10. return false will return control to caller of the function x as soon as i is equal to 5. The return true line is unreachable.
This is your code

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) return false;
    }
    return true
}

console.log(x());

Output:-

 0
 1
 2
 3
 4
 5
 false

If you want it reach to the return true statement you may want to do something like adding a break instead of return false in for loop.

for (var i = 0; i < 10; i++) {
            console.log(i);
            if (i == 5) break;//this will put it outside for loop
        }

Upvotes: 1

Manwal
Manwal

Reputation: 23816

return false is not breaking your loop but returning control outside back.

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) return false;
    }
    return true
}

console.log(x())

Output:

0
1
2
3
4
5
false //here returning false and control also 

Where break will break your loop instead of coming out from function.

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) break;
    }
    return true
}

console.log(x())

Will output:

0
1
2
3
4
5 //after this loop is breaking and ouputing true
true 

Upvotes: 9

lordvlad
lordvlad

Reputation: 5347

The below code apparently logs values 1 to 5, then breaks out of the 'for' loop, because the 'false' value is returned.

Wrong, it breaks out of the for loop because of the return, not because of the false. You could write return x with the same effect. Point is, return immediatly drops out of the enclosing function, whatever loop or conditional is being executed currently.

Upvotes: 1

Related Questions