javascript - 将大对象作为纯参数或对象传递
问题描述
我的问题很简单,将veryLargeObj
pass作为参考吗?如果是的话,除了创建对象之外,这两个示例之间是否有任何性能影响?
样品 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);
其他模块也一样。
推荐阅读
- javascript - Markdown-它不适用于 Nuxt 和内容,抛出错误
- java - 找不到元素“资源”的声明
- microsoft-teams - 如何处理 Microsoft Teams 选项卡中的重定向
- html - HTML、A href 和名称
- html - 如何在特定条件下从 Angular 8 中的 formarray 中选中复选框
- vue.js - vue中如何实现全动态面包屑
- python - 为什么以这种顺序编写代码仍然有效?
- android-studio - 在firebase中获取用户会话的id不是获取的吗?
- javascript - 在Node JS中杀死进程之前检查进程所有者名称
- c++ - 将模板特化为仅采用具有模板参数的类的类型名