当前位置: 首页 > 知识库问答 >
问题:

javascript - vue源码中,能直接用false的地方,为什么要引入一个总是返回false的函数来得到false?

安博文
2023-04-23

Vue-2.0

// src/shared/util.js
/**
 * Always return false.
 */
export const no = () => false
// src/core/config.js
import { no, noop } from 'shared/util'

const config: Config = {
    isReservedTag: no,
    isUnknownElement: no,
    mustUseProp: no,
    ......
}

虽然no函数很简单,执行很快,但终归会比直接写 false 要多花时间吧。

共有1个答案

公良天逸
2023-04-23

在 Vue 源码中,将一个总是返回false的函数(例如no)用于配置(如isReservedTagisUnknownElement等)的原因是为了提供可扩展性和灵活性。

这样的设计允许在不同的构建版本或环境中动态地替换这些函数。例如,在运行时编译版本的 Vue 中,这些函数可能需要在编译时进行一些特定的检查,因此可以被其他实现替换。而在基本版本中,这些检查可能是不必要的,所以提供一个返回 false 的默认实现是有意义的。

虽然使用一个函数会稍微增加一点运行时的开销,但这种开销非常小,几乎可以忽略不计。在实际应用中,这样的设计带来的可扩展性和灵活性优势远远超过了这点微小的性能损失。实际上,在大多数情况下,性能瓶颈并不在这些函数上,而在于其他高复杂度的计算和操作。

 类似资料:
  • 问题内容: 我找到了JavaDoc的方法: 返回:如果此线程已被中断,则返回true;否则返回false。 否则为假。 我对这种方法的理解有误。此外,我可能会误解Thread中的“中断”概念。 欢迎任何解释!谢谢! 程式码片段: 在线程定义中: 调用: 问题答案: 引发异常后,线程不再处于中断状态。

  • 在.NET Framework 4.5中,由Trim()方法调用的专用TrimHelper()方法使用以下条件来确定是否需要修剪字符:(由.NET Reflector反编译的代码) 我想知道为什么IsBOMWhitesspace方法总是返回false?? 这是微软计划在未来改变/扩展的吗?例如,通过检查char是否为‘u efff’并在这种情况下返回true?

  • 问题内容: 如果我这样做: 那又回来了。仅仅是因为在列表中。 但是,如果我这样做: 那又回来了。而等于: 为什么? 问题答案: 运算符优先级 2.x,3.x。的优先级低于的优先级。因此,它等效于: 这就是你想要的: 正如@Ben指出的那样:建议从不写作,更喜欢。前者使它看起来像一个函数调用,而它却是一个运算符,而不是一个函数。

  • 问题内容: 我已经写了这段简单的代码: 在我的情况当属。谁能建议/建议出什么问题了? 问题答案: 错误检查和处理是程序员的朋友。检查初始化和执行cURL函数的返回值。并在失败的情况下包含更多信息: *在 手动状态: 成功返回cURL句柄,错误返回 FALSE 。 我观察到该函数在您使用其参数且无法解析域时会返回。如果未使用该参数,则该函数 可能 永远不会返回。但是,请务必始终进行检查,因为该手册并

  • 为什么以下输出为True? 这将始终输出,即使条件似乎表明并非如此。如果我删除括号,那么它可以工作,但我不明白为什么。

  • 我对递归函数有问题。它总是返回 false,即使它是真的。 我有以下带有名称的数组: 下面是我的函数: 然后当我使用数组中的名称时,它仍然返回 false :