发布于 2014-11-09 22:40:03
options = merge({}, options)
语句的意义是什么,因为它只是将options
对象与空对象连接起来?
才能做到这一点。它将所有属性复制到一个新对象中,在该对象中,即使serveStatic
的调用方仍然保存对他传递的options
对象的引用,也不能修改它们。
但是,避免调用者干扰对象并不是分离对象的唯一原因。如果我们继续读下去,我们会看到
delete options.setHeaders
options.maxage = options.maxage || options.maxAge || 0
options.root = root
因此,我们还希望避免干扰传递给我们的对象。改变你的论点是反模式的。
发布于 2014-11-09 22:39:19
merge({}, options)
创建的新对象具有与源对象相同的属性(因此它是克隆JS对象的最简单方法)。但是,如果不将空对象作为合并函数的目标对象传递,或者跳过这一行,则options
对象在serveStatic()
函数中的所有更改将影响传递给函数serveStatic()
的外部对象。
下面是对JavaScript语言的细微差别的详细解释:https://stackoverflow.com/a/3638034/1806421
https://stackoverflow.com/questions/26834051
复制相似问题