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.

Noncompliant Code Example

function fun(a) {
  var i = 10;
  return i + a;
  i++;             // Noncompliant; this is never executed
}

Compliant Solution

function fun(int a) {
  var i = 10;
  return i + a;
}

Exceptions

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;
}

See