【发布时间】: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