gpt4 book ai didi

javascript - 试图理解这个例子中的函数闭包和词法环境。使用 let 变量声明与对象属性声明

转载 作者:行者123 更新时间:2023-12-01 00:15:00 25 4
gpt4 key购买 nike

学习一些关于词法环境、闭包以及函数是对象的类(class)。但是,下面的代码,我无法理解 counter.count 如何累积,即使每次调用 counter.count = 0 时它都会重置回 0

Function properties can replace closures sometimes. For instance, we can rewrite the counter function example from the chapter Variable scope to use a function property:

摘自 Javascript.info

function makeCounter() {
// instead of:
// let count = 0

function counter() {
return counter.count++;
};

counter.count = 0;

return counter;
}

let counter = makeCounter();
alert( counter() ); // 0
alert( counter() ); // 1

即使在这个例子中没有使用属性

function makeCounter() {
let count = 0;

return function() {
return count++;
};
}

let counter = makeCounter();
alert( counter()); //0
alert( counter()); //1

let在函数声明期间声明一次 count 吗?随后重复调用counter()不会触发let counter = 0;又来了?

重复调用不是和下面的代码一样吗? b/c 我知道这会出错

let counter = 0;
let counter = 0;

代码摘录自 Javascript.info

最佳答案

let counter = 0 仅在调用 makeCounter() 时发生。每次调用都会返回一个不同的闭包,它有自己的 count 变量实例。

调用 counter() 不会再次调用 makeCounter(),因此它不会创建新的 counter 变量。闭包会记住您第一次调用 makeClosure() 时创建的 count 实例。

关于javascript - 试图理解这个例子中的函数闭包和词法环境。使用 let 变量声明与对象属性声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59828742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com