【发布时间】:2021-01-05 21:57:38
【问题描述】:
我不确定我是否准确地表达了这个问题,但到目前为止,我一直认为 javascript 中的函数声明是“一成不变的”。
当我试图更好地理解闭包(模仿 React 的 useState 的简化版本)时,我开始不确定以下代码块中的“x”在内存中的存储位置:
function useState () {
let x = 0;
return [function() { console.log(x) },function (y) { x = y}];
}
const [getX, setX] = useState();
getX()
setX(1)
getX()
所以当 useState 函数返回一个 getter 和一个 setter 作为变量“getX”和“setX”时,“x”究竟存储在哪里?在useState的原始声明中?我在这里错过了什么?
【问题讨论】:
-
let x- 你的x -
对,但这是否意味着它本质上是在原始函数声明中重写自己?
-
表示x存储了调用
function (y) { x = y}时的值....也就是setX -
我想我对 getter/setter 仍然能够访问内部范围感到困惑;我一直认为闭包处理的是能够访问外部作用域。
-
“getter”和“setter”是由
useState返回的函数
标签: javascript reactjs function closures