【发布时间】:2019-05-23 18:49:04
【问题描述】:
我有一个像这样的高阶组件FormBuilder:
const FormBuilder = (WrappedComponent) => {
const name = 'bob';
return class HOC extends React.Component {
render() {
return (
<div>
<WrappedComponent {...props} />
</div>
);
}
}
}
我认为从这个函数返回的 HOC 组件可以被认为是一个闭包,因为它可以访问它的 props(自己的范围)、变量 name 和组件 WrappedComponent(外部函数的范围)以及在全局范围内定义的任何内容。任何人都可以验证我的想法是否正确?
【问题讨论】:
-
闭包是函数和声明该函数的词法环境的组合。此环境由创建闭包时在作用域内的所有局部变量组成。 (ref.)
-
它们是根据developer.mozilla.org/en-US/docs/Web/JavaScript/Closures 定义的闭包,但它们不太可能经常被称为,因为这并不能解释任何事情;任何函数都可以被认为是 JS 中的闭包。
-
HOC不是闭包,但HOC.prototype.render是。
标签: javascript reactjs closures higher-order-components