【问题标题】:Default property setting in JavaScript (as seen in Lodash source)JavaScript 中的默认属性设置(如 Lodash 源代码所示)
【发布时间】:2015-10-19 20:16:40
【问题描述】:

在查看 lodash 如何实现其 extend method 时,我注意到他们为默认参数分配选择了一种非典型语法。

我的习惯:

function doStuff(obj) {
    obj = obj || {};
}

lodash 是如何做到的:

function doStuff(obj) {
    obj || (obj = {});
}

这种风格有什么特别的优势吗?我知道第二种方法避免了不必要的分配操作,但还有其他理由以 lodash 方式进行吗?或者这只是我不应该担心的微优化。

【问题讨论】:

  • 我更喜欢第一个,因为你的意图更清楚,但这主要是个人喜好。
  • 第二种模式可能更快或更安全,因为它不会重新分配obj,除非它必须这样做,这也使得它对于不纯函数更好,其中简单的重新分配值可以是个问题。
  • 就我而言,我非常喜欢第二种方式,但这取决于你。但如果您使用的是代码质量工具(jslint、jshint),请确保您的配置正确。
  • @dandavis 你能解释一下它怎么可能更安全吗?我不太明白这种方式如何成为不纯函数的更好替代方案,毕竟它们对我来说似乎同样不纯。速度方面似乎是一种洗涤:jsperf.com/lodash-default-props
  • 再看一遍,简单的语法似乎还可以,这是对这类操作的概括,可能会在不纯函数中出现问题。这个简单示例的可取之处在于对象/可变对象不能是虚假的(当然,重新分配仅限于本地)。如果您保持在这些限制范围内,那很好。你肯定不想做的是上面的obj.sub || (obj.sub = {});,或者只是使用上面没有obj 形式参数的东西。我最初的担忧是重新分配可能有别名的对象,但我想那些不可能是假的......

标签: javascript arguments underscore.js lodash


【解决方案1】:

最终总结 - 似乎是个人喜好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    相关资源
    最近更新 更多