The javascript interpreter/compiler is so smart to only insert automatic semicolons if afterwards there is valid Javascript.
Your code works, because && b
as it stands is no valid expression – that’s why no semicolon gets inserted after the return a
resulting in:
return a && b && c;
However:
return (undefined);//implicitely inserted
{
....
}
is perfectly valid and thats why a semicolon gets inserted.
For completeness’ sake the ref to the spec: automatic semicolon insertion. THe examples are worth reading through.