Question about an IF statement within a FOR loop

Hi all,

I was exploring for loops, and the use of if statements within them, and I’m unclear about how they actually execute. Here’s a function that finds whether a number is prime:

function isPrime(num) {
    for (let i = 2; i < num; i++)
        if (num % i === 0) {
            return false;
       return num > 1;
};

I understand generally what’s happening. isPrime(12); for example, would divide the number 12 starting with 2, and increasing by one until 11. If 12 is divisible by that number, it will return false. If it isn’t, it will return true if 12 is greater than 1.

My understanding, however, is that the for loop would iterate through until i < num. So, while 12 % 2 will return false, 12 % 11 will not. So why does the statement return false? Or why doesn’t the statement return a multiple false and true values? Does it just stop if the if statement’s condition is met?

I clearly don’t have a firm understanding of how this works, specifically.

Thanks for any explanation that can help!

Hi, welcome to the forums!

There’s a couple of points for clarification here:

  • “would divide the number 12 starting with 2” - The % (modulus operator) is not one that deals with division. Nothing is being divided in this code
  • 12 % 2 will return false - 12 % 2 evaluates to 0. So 12 % 2 === 0 evaluates to true.
  • The modulus operator calculates the remainder after division. So 6%5=1, 6%4=2 etc.

For the code itself, unwrapping from the inside out, there’s a couple of issues. For one there’s two return statements in one code block

if (num % i === 0) {
           return false;
       return num > 1;
}

Unlike python, indentation won’t matter here, and the first return will be the one that always triggers.

As for the second return statement, you don’t want it to be in your for-loop. You should explicitly bracket the loop so you leave it out. Otherwise it won’t cycle through your list and properly filter the prime number.

if (num % i === 0) {
           return false;
}
return num > 1;

You’ll notice that with this logic, if the number is not even, it will return num > 1.

return stops the running of the function if I remember correctly. So that’s why.

Thanks for catching the errors in the code, and clarifying the modulus operator for me. Makes sense.

Once the return statement is expressed, does the for loop stop?

Ah! This would make sense. Thank you!

No problem!

Return statements, once run, end the function, not just the loop (not going to mention recursion, but technically it’s true with recursion as well).

@blogmaster63629 You can also run test code like this, it will tell you how it’s evaluating the condition for every i:

function isPrime(num) {
    for (let i = 2; i < num; i++){
        console.log(num % i === 0)
        }
};
1 Like