将大对象作为纯参数或对象传递

Passing large object as a pure argument or object

我的问题很简单,veryLargeObj 会在两者中作为参考通过吗?如果是,除了对象创建之外,这两个示例之间是否有任何性能影响?

样本 1:

import veryLargeObj from './here'

function someFn(veryLargeObj){
    ...
}

样本 2:

import veryLargeObj from './here'

function someFn( {veryLargeObj} ){
    ...
}

此外,示例 2 参数是否会像下面这样创建:

                           {"veryLargeObj": veryLargeObj}
normal property name  -------^^^^^^^^^^^^   ^^^^^^^^^^^^------- reference to large obj? 

是的,它们将是完全相同的对象。例如,如果第一个模块导入了第二个模块并以某种方式相互交互,他们会看到导入的对象是 ===.

正如您所指出的,唯一重要的开销是在创建对象时。 ES6 模块的顶层只会 运行 一次,即使它被导入多个地方。

但我认为您的符号有点混淆:

import veryLargeObj from './here'

function someFn(veryLargeObj){
    ...
}

在这里,您没有在任何地方使用大对象 - 相反,您声明 someFn 采用一个 参数 恰好被命名为 veryLargeObj.如果您想使用导入,请执行类似

import veryLargeObj from './here'

function someFn(){
    // use veryLargeObj here
}

import veryLargeObj from './here'

function someFn(veryLargeObj){
    // use veryLargeObj here
}
someFn(veryLargeObj);

其他模块也一样。