Jump statements (return, break and continue) and throw expressions move control flow out of the
current code block. So any statements that come after a jump are dead code.
function fun(a) {
var i = 10;
return i + a;
i++; // Noncompliant; this is never executed
}
function fun(int a) {
var i = 10;
return i + a;
}
This rule ignores unreachable break statements in switch clauses.
switch (x) {
case 42:
return 43;
break; // Compliant
default:
doSomething();
}
Hoisted variables declarations without initialization are always considered reachable.
function bar() {
return x = function() {
x.foo = 42;
}
var x;
}