Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将大对象作为纯参数或对象传递_Javascript_Node.js_Es6 Modules - Fatal编程技术网

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

Javascript 将大对象作为纯参数或对象传递,javascript,node.js,es6-modules,Javascript,Node.js,Es6 Modules,我的问题很简单,veryLargeObj会在这两个版本中作为参考传递吗?如果是,除了对象创建之外,这两个示例之间是否存在性能影响 示例1: 从“/此处”导入veryLargeObj 函数someFn(veryLargeObj){ ... } 示例2: 从“/此处”导入veryLargeObj 函数someFn({veryLargeObj}){ ... } 另外,示例2参数的创建方式是否如下所示: {"veryLargeObj&q

我的问题很简单,
veryLargeObj
会在这两个版本中作为参考传递吗?如果是,除了对象创建之外,这两个示例之间是否存在性能影响

示例1:

从“/此处”导入veryLargeObj
函数someFn(veryLargeObj){
...
}
示例2:

从“/此处”导入veryLargeObj
函数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);