2017-08-12 72 views
5

我正在查看React源代码,并偶然发现了一个要求var emptyFunction = require('fbjs/lib/emptyFunction');makeEmptyFunction在fbjs中有什么用途?

我看着这个功能,被它的功能搞糊涂了。

下面是函数

function makeEmptyFunction<T>(arg: T): (...args: Array<any>) => T { 
    return function() { 
    return arg; 
    }; 
} 

const emptyFunction: (...args: Array<any>) => void = function() {}; 

在评论,他们给我被混淆了如下解释:

该函数接受并丢弃输入;它没有副作用。 这主要是有用的惯用的重写功能 端点总是需要被调用,因为JS缺少空拨打 成语ALA可可

我从来没有碰到过空呼成语并希望有人能澄清这意味着什么,并用较少的技术语言解释此功能的目的。

希望这个问题不会被忽视,因为它不完全是代码相关的。也许它属于别的地方,如果是的话,我很抱歉。

回答

4

在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库中找到类似的助手,例如JQueryAngularJS