- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在浏览 React 源代码时无意中发现了一个需求,它是 var emptyFunction = require('fbjs/lib/emptyFunction');
。
我查看了这个函数,对它的作用感到困惑。
这是函数
function makeEmptyFunction<T>(arg: T): (...args: Array<any>) => T {
return function() {
return arg;
};
}
const emptyFunction: (...args: Array<any>) => void = function() {};
在评论中,他们给出了以下让我感到困惑的解释:
This function accepts and discards inputs; it has no side effects. This is primarily useful idiomatically for overridable function endpoints which always need to be callable, since JS lacks a null-call idiom ala Cocoa
我从来没有遇到过null call idiom,希望有人能用不太专业的语言阐明这意味着什么并解释这个函数的目的。
希望这个问题不会被轻视,因为它与代码并不完全相关。也许它属于其他地方,如果是这样我很抱歉。
最佳答案
在用JavaScript编程时,我们可以将一个函数作为参数进行某种操作。例如,一个函数可能有一个回调,它会在某种事件发生后被调用。
function doIt(callback) {
// some work
callback();
// more work
}
现在,如果此 callback
是可选参数且未提供,我们将得到 Uncaught TypeError: callback is not a function
错误,因为回调未定义。这个问题有两种解决方案。显而易见的是使用 if
语句检查 callback
。如果未分配,另一个选项是将空函数设置为 callback
的默认值。如果我们有多个调用 callback
函数的地方,这种方法非常有用并且会大放异彩。所以我们不需要每次调用它之前都检查它是否未定义。
function doIt(callback) {
callback = callback || function(){};
// some work
callback();
// more work
}
同样,在许多用例中我们可以拥有可覆盖的函数变量。将这些类型的变量设置为空函数作为默认值是一种常见的模式,这样我们就可以调用它们而不必担心它们是否被赋值/覆盖。
此外,在某些特殊情况下,让函数只返回一个特定值是很有用的。 makeEmptyFunction
用于创建此类函数。基本上,它返回一个函数,该函数只返回传递给它的参数。
emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
正如您在文件中看到的那样,上面的代码生成了一个返回 false
值的空函数。
“null call idiom”是我们在 Objective-C/Cocoa 编程中发现的东西。它基本上允许您 call a method of an uninitialized object (空指针)而不会像大多数其他语言那样给出任何错误。我认为这就是作者试图在评论中解释的内容。
由于 JavaScript 没有这样的语言特性,我们明确地使用空函数来实现它。有些人称之为 no-op 或 noop,您可以在其他流行的 JavaScript 库中找到类似的帮助程序,例如 JQuery和 AngularJS还有。
关于javascript - makeEmptyFunction 在 fbjs 中的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45652381/
我在浏览 React 源代码时无意中发现了一个需求,它是 var emptyFunction = require('fbjs/lib/emptyFunction');。 我查看了这个函数,对它的作用感
我是一名优秀的程序员,十分优秀!