Breaking out of JavaScript 'For' Loop using False?

半世苍凉 提交于 2019-12-08 08:22:44

问题


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:

  • How come the for loop short-circuits when 'false' is returned? I looked at MDN but there is nothing there about using 'false' to break out of the for loop. Also tried looking at ECMA specs, but sadly too noob.

  • Why doesn't the function return 'true' to the console, as the 'return true' statement exists after the 'for' loop is executed? Even if false somehow returns 'first', shouldn't 'true' return last or also?


回答1:


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 



回答2:


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




回答3:


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.




回答4:


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
        }



回答5:


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 


来源:https://stackoverflow.com/questions/32942567/breaking-out-of-javascript-for-loop-using-false

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!