# Return Early Pattern for Function

Tell us what’s happening:
When I am using expression like : `if (a && b) >0` then the program does not execute 1 condition ie. (2,-2). Can any one explain what is the difference between : `if ((a>0) && (b>0))` or using : `if (a && b) >0`?

``````
// Setup
function abTest(a, b) {
// Only change code below this line

if ((a>0) && (b>0)) {

// Only change code above this line

return Math.round(Math.pow(Math.sqrt(a) + Math.sqrt(b), 2));
}
else if ((a<0) && (b<0)) {
return undefined
}
}
// Change values below to test your code
var test =abTest(2,-2);
console.log(test);
``````

User Agent is: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36`.

the `Logical AND` return one of the two operands, so it can return a non boolean value.

The `&&` expression return the second value if the first one can be converted to true; else, returns the first.

Or in practice

``````let a = 'test';
let b = 'expression';

a && b // returns 'expression'
``````

So there is a big difference in saying

``````(a && b) > 0
// and
a > 0 && b > 0
``````

In a case where

``````a = -1
b = 1

(a && b ) > 0  // true
// -1 && 1 return 1
// 1 > 0 return true

a > 0 && b > 0 // false
// a > 0 false
// b > 0 true
// false && true return false
``````