如何正确返回空函数?

时间:2013-06-10 14:20:15

标签: javascript jslint

我正在使用运行时功能分配来解决浏览器差异。但是对于不支持的浏览器,我想返回一个空函数,以免抛出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 个答案:

答案 0 :(得分:10)

您可以为您的函数添加一个正文,并让它返回undefined

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

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

答案 1 :(得分:5)

对我来说这是最好的:

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)

答案 2 :(得分:1)

使用lambda表达式:

<div id="div_one">Hello</div>
<div id="div_two"></div>

答案 3 :(得分:0)

返回

return () => undefined;

代替

return $R.functionNull;