Why does JSLint complain about "Unexpected 'else' after 'return'"?

Hal picture Hal · Feb 28, 2012 · Viewed 13.3k times · Source

JSLint complains that the following (useless example) code is invalid:

(function (x) {
    "use strict";
    if (x === 1) {
        return 1;
    } else if (x === 2) {
        return -1;
    }
    return 0;
}(1));

Error: Problem at line 4 character 9: Unexpected 'else' after 'return'.

return 1;

Is it seriously suggesting that it's bad to use return statements inside an if/else structure?

It thinks this version is fine:

(function (x) {
    "use strict";
    var returnval = 0;
    if (x === 1) {
        returnval = 1;
    } else if (x === 2) {
        returnval = -1;
    }
    return returnval;
}(1));

Answer

georg picture georg · Feb 28, 2012

It's just telling you that else after return is superfluous. The following is fine:

(function (x) {
    "use strict";
    if (x === 1) {
        return 1;
    }  
    if (x === 2) {
        return -1;
    }
    return 0;
}(1));