理解JavaScript对象属性(函数)引用同一对象中的其他属性

理解JavaScript对象属性(函数)引用同一对象中的其他属性,javascript,reactjs,react-hooks,javascript-objects,readability,Javascript,Reactjs,React Hooks,Javascript Objects,Readability,因此,我偶然发现了一个基于React Hooks的组件,它使用对象对各种函数进行分类以提高可读性 例如 const MyComponent=(道具)=>{ 常量实用程序={ 实用性1:()=>{ //…一些功能 }, 实用性2:()=>{ //…一些功能 }, }; 常量渲染器={ 渲染器1:()=>{ //…一些渲染逻辑 }, 渲染器2:()=>{ //…一些渲染逻辑 返回( {renderers.renderer1()} ); }, }; 返回( //…渲染逻辑 ); }; 我想了解的是为

因此,我偶然发现了一个基于React Hooks的组件,它使用对象对各种函数进行分类以提高可读性

例如

const MyComponent=(道具)=>{
常量实用程序={
实用性1:()=>{
//…一些功能
},
实用性2:()=>{
//…一些功能
},
};
常量渲染器={
渲染器1:()=>{
//…一些渲染逻辑
},
渲染器2:()=>{
//…一些渲染逻辑
返回(
{renderers.renderer1()}
);
},
};
返回(
//…渲染逻辑
);
};
我想了解的是为什么
render2
即使在调用
render1
时也能正常工作

我的理解是,在执行代码时将声明对象,并且在定义所有属性之前声明是不完整的(这只是我的理解,我可能完全错了)

我真的很想知道为什么这一点点代码能工作,尤其是为什么它能正确工作

另外,另一方面,与基于类的组件相比,我觉得基于钩子的组件不太可读,这种方法试图缓解这个问题。因此,我想知道这是否是使基于钩子的组件可读的最佳方法,或者是否有其他更好的方法来实现这一点?

我的理解是,在执行代码时将声明对象,并且在定义所有属性之前,声明是不完整的

事实并非如此。变量声明在编译时提前发生,在任何代码实际运行之前。不过,对变量的赋值发生在运行时。这包括评估分配的值

因此,在您所说的情况下,当计算分配给
renders
的对象时,
renders
变量实际上已经声明


也必须考虑这样一个事实:<代码>渲染器.ReReReRe1()/Case>实际上不被称为对这个对象的评估的一部分——但仅在稍后,当“代码>渲染器.ReReReRe2())/代码>实际上被调用时,对象评估和赋值都将完成,因此<代码>渲染器.ReReReRe1()将是您所期望的。

这只是一个问题,这是否回答了您的问题?哦,对了!事实上,它后来被调用是非常有意义的!就像,那句话在我的脑海里一闪而过。非常感谢:)