no-unreachable

returnthrowcontinuebreak 语句之后禁止无法访问的代码

配置文件 中的 "extends": "eslint:recommended" 属性启用了该规则

因为 returnthrowbreakcontinue 语句无条件退出代码块,所以后面的任何语句都无法执行。无法访问的语句通常是一个错误。

function fn() {
    x = 1;
    return x;
    x = 3; // this will never execute
}

另一种错误是在其构造函数没有调用 super() 的子类中定义实例字段。子类的实例字段只添加到 super() 之后的实例中。如果没有 super() 调用,则它们的定义永远不会应用,因此是无法访问的代码。

class C extends B {
    #x; // this will never be added to instances

    constructor() {
        return {};
    }
}

规则详情

此规则不允许在 returnthrowcontinuebreak 语句之后出现无法访问的代码。此规则还标记其构造函​​数没有 super() 调用的子类中的实例字段定义。

Wk+Mu7oFIccqpNSe5orR05ZG/BDV40hHIKzF0SoJnVcuS8r6evQjx3oyoFn9+fZT

/*eslint no-unreachable: "error"*/

function foo() {
    return true;
    console.log("done");
}

function bar() {
    throw new Error("Oops!");
    console.log("done");
}

while(value) {
    break;
    console.log("done");
}

throw new Error("Oops!");
console.log("done");

function baz() {
    if (Math.random() < 0.5) {
        return;
    } else {
        throw new Error();
    }
    console.log("done");
}

for (;;) {}
console.log("done");

xUdwMv8hU16M1Mz7UrjaqVHKlc65475HVFHZDmko9F6T4aP6gQQGM0U2Mqi75UFudT8JcEqWAIJbK6eodfXlyOmXgonpUYDdxJwjgvVJ8rU=

/*eslint no-unreachable: "error"*/

function foo() {
    return bar();
    function bar() {
        return 1;
    }
}

function bar() {
    return x;
    var x;
}

switch (foo) {
    case 1:
        break;
        var x;
}

B6FQUBpYcogcbH2VwZYCv85Cb+ZAwiCAJsQ8xhf5E4KIJ3j4E8AIqLEMmv8nix32

/*eslint no-unreachable: "error"*/

class C extends B {
    #x; // unreachable
    #y = 1; // unreachable
    a; // unreachable
    b = 1; // unreachable

    constructor() {
        return {};
    }
}

+pTkrjCIH/pTqMNex4q7WmU0yEZJS3Gu+HrEZOzssGrbjdAyQemCahCuKYL/fVYw

/*eslint no-unreachable: "error"*/

class D extends B {
    #x;
    #y = 1;
    a;
    b = 1;

    constructor() {
        super();
    }
}

class E extends B {
    #x;
    #y = 1;
    a;
    b = 1;

    // implicit constructor always calls `super()`
}

class F extends B {
    static #x;
    static #y = 1;
    static a;
    static b = 1;

    constructor() {
        return {};
    }
}