12

我正在使用函数的运行时分配来解决浏览器的差异。但是对于不受支持的浏览器,我想返回一个空函数,这样就不会引发 JavaScript 错误。

但是,jslint 抱怨空函数。jslint 的快乐方式是什么?

空块。

$R.functionNull = function () {
    // events not supported;
};

$R.Constructor.prototype.createEvent = (function () {
    if (doc.createEvent) {
        return function (type) {
            var event = doc.createEvent("HTMLEvents");
            event.initEvent(type, true, false);
            $NS.eachKey(this, function (val) {
                val.dispatchEvent(event);
            });
        };
    }
    if (doc.createEventObject) {
        return function (type) {
            var event = doc.createEventObject();
            event.eventType = type;
            $NS.eachKey(this, function (val) {
                val.fireEvent('on' + type, event);
            });
        };
    }
    return $R.functionNull;
}());
4

4 回答 4

15

您可以为您的函数添加一个主体并让它返回undefined

$R.functionNull = function() {
    // Events not supported.
    return undefined;
};

这与“真正的空”函数保持相同的语义,并且应该满足 JSLint。

于 2013-06-10T14:28:14.487 回答
10

使用 lambda 表达式:

$R.functionNull = () => void 0;
于 2018-02-07T08:26:06.127 回答
7

对我来说,这最有效:

emptyFunction = Function();

console.log(emptyFunction); // logs 'ƒ anonymous() {}'
console.log(emptyFunction()); // logs 'undefined'

它太短了,我什至不会将它分配给变量(当然您也可以使用类似常量的变量“EF”左右,它甚至更短并且不需要额外的“()”括号)。只需在需要真正空函数的任何地方使用“Function()”,它甚至没有名称,即使将其分配给变量也不行,这就是我的解决方案与 Frédéric 的解决方案之间的微小行为差异:

// --- Frédéric ---

emptyFunction = function() {
   return undefined;
}

console.log(emptyFunction.name); // logs '"emptyFunction"'

// --- me ---

emptyFunction = Function();

console.log(emptyFunction.name); // logs '""' (or '"anonymous"' in chrome, to be fair)
于 2017-07-10T22:51:44.960 回答
1

回国怎么办

return () => undefined;

代替

return $R.functionNull;

于 2020-04-28T11:50:54.627 回答