版本

func-name-matching

要求函式名稱與其賦值的變數或屬性名稱相符

規則詳細資訊

此規則要求函式名稱與其賦值的變數或屬性名稱相符。如果屬性名稱是字面值,且在您的設定中指定的 ECMAScript 版本 (預設為 ES5) 中不是有效的識別符號,此規則將會忽略該屬性賦值。

此規則的錯誤程式碼範例

在遊樂場中開啟
/*eslint func-name-matching: "error"*/

var foo = function bar() {};
foo = function bar() {};
obj.foo = function bar() {};
obj['foo'] = function bar() {};
var obj = {foo: function bar() {}};
({['foo']: function bar() {}});

class C {
    foo = function bar() {};
}
在遊樂場中開啟
/*eslint func-name-matching: ["error", "never"] */

var foo = function foo() {};
foo = function foo() {};
obj.foo = function foo() {};
obj['foo'] = function foo() {};
var obj = {foo: function foo() {}};
({['foo']: function foo() {}});

class C {
    foo = function foo() {};
}

此規則的正確程式碼範例

在遊樂場中開啟
/*eslint func-name-matching: "error"*/
// equivalent to /*eslint func-name-matching: ["error", "always"]*/

var foo = function foo() {};
var foo = function() {};
var foo = () => {};
foo = function foo() {};

obj.foo = function foo() {};
obj['foo'] = function foo() {};
obj['foo//bar'] = function foo() {};
obj[foo] = function bar() {};

var obj = {foo: function foo() {}};
var obj = {[foo]: function bar() {}};
var obj = {'foo//bar': function foo() {}};
var obj = {foo: function() {}};

obj['x' + 2] = function bar(){};
var [ bar ] = [ function bar(){} ];
({[foo]: function bar() {}})

class C {
    foo = function foo() {};
    baz = function() {};
}

// private names are ignored
class D {
    #foo = function foo() {};
    #bar = function foo() {};
    baz() {
        this.#foo = function foo() {};
        this.#foo = function bar() {};
    }
}

module.exports = function foo(name) {};
module['exports'] = function foo(name) {};
在遊樂場中開啟
/*eslint func-name-matching: ["error", "never"] */

var foo = function bar() {};
var foo = function() {};
var foo = () => {};
foo = function bar() {};

obj.foo = function bar() {};
obj['foo'] = function bar() {};
obj['foo//bar'] = function foo() {};
obj[foo] = function foo() {};

var obj = {foo: function bar() {}};
var obj = {[foo]: function foo() {}};
var obj = {'foo//bar': function foo() {}};
var obj = {foo: function() {}};

obj['x' + 2] = function bar(){};
var [ bar ] = [ function bar(){} ];
({[foo]: function bar() {}})

class C {
    foo = function bar() {};
    baz = function() {};
}

// private names are ignored
class D {
    #foo = function foo() {};
    #bar = function foo() {};
    baz() {
        this.#foo = function foo() {};
        this.#foo = function bar() {};
    }
}

module.exports = function foo(name) {};
module['exports'] = function foo(name) {};

選項

此規則接受一個可選的字串 "always""never"(省略時,預設為 "always"),以及一個可選的選項物件,其中包含兩個屬性 considerPropertyDescriptorincludeCommonJSModuleExports

considerPropertyDescriptor

一個布林值,預設為 false。如果 considerPropertyDescriptor 設定為 true,則檢查時會將 Object.createObject.definePropertyObject.definePropertiesReflect.defineProperty 的使用納入考量。

{ considerPropertyDescriptor: true } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint func-name-matching: ["error", { "considerPropertyDescriptor": true }]*/
// equivalent to /*eslint func-name-matching: ["error", "always", { "considerPropertyDescriptor": true }]*/
var obj = {};
Object.create(obj, {foo:{value: function foo() {}}});
Object.defineProperty(obj, 'bar', {value: function bar() {}});
Object.defineProperties(obj, {baz:{value: function baz() {} }});
Reflect.defineProperty(obj, 'foo', {value: function foo() {}});

{ considerPropertyDescriptor: true } 選項的錯誤程式碼範例

在遊樂場中開啟
/*eslint func-name-matching: ["error", { "considerPropertyDescriptor": true }]*/
// equivalent to /*eslint func-name-matching: ["error", "always", { "considerPropertyDescriptor": true }]*/
var obj = {};
Object.create(obj, {foo:{value: function bar() {}}});
Object.defineProperty(obj, 'bar', {value: function baz() {}});
Object.defineProperties(obj, {baz:{value: function foo() {} }});
Reflect.defineProperty(obj, 'foo', {value: function value() {}});

includeCommonJSModuleExports

一個布林值,預設為 false。如果 includeCommonJSModuleExports 設定為 true,則此規則會檢查 module.exportsmodule["exports"]

{ includeCommonJSModuleExports: true } 選項的錯誤程式碼範例

在遊樂場中開啟
/*eslint func-name-matching: ["error", { "includeCommonJSModuleExports": true }]*/
// equivalent to /*eslint func-name-matching: ["error", "always", { "includeCommonJSModuleExports": true }]*/

module.exports = function foo(name) {};
module['exports'] = function foo(name) {};

何時不該使用

如果您希望允許具名函式的名稱與其賦值的變數或屬性名稱不同,請勿使用此規則。

相容性

版本

此規則是在 ESLint v3.8.0 中引入的。

資源

變更語言