gpt4 book ai didi

javascript - 我的闭包示例没有像我想的那样工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:10:15 25 4
gpt4 key购买 nike

我试图弄清楚闭包并创建了这个简单的示例,您在其中调用带有名称的函数 greet 并且在第一次调用后问候语应包含先前给定的名称。

因此,如果您调用 greet('Andrew') 和 greet('Joseph'),我希望在控制台上看到:

Hello Andrew
Hello Andrew, Joseph

这是我的代码: https://codepen.io/anon/pen/pVpBdy

let greet = function(name) {
let greeting = 'Hello ';

let updateGreet = function() {
greeting = greeting + ', ' + name;
}

let printGreet = function() {
console.log(greeting + name);
updateGreet();
}

return printGreet();
}

greet('Andrew');
greet('Joseph');

我看到的结果是:

Hello Andrew
Hello Joseph

似乎每次我调用 greet() 时都会重新初始化问候语,我不知道为什么。

请帮助我理解这一点。

最佳答案

您当前的 greet 可以被调用以创建 一个独立的对象 - 对象 然后存储名称。当前每次调用 greet 时,您都在创建一个单独的 greeting 变量,封装在不同的对象中。

最简单的方法是立即执行函数,这样所有对 greet 的调用都将引用同一个对象。

您还应该将 name 变量传递给 updateGreet:

const greet = (() => {
let greeting = 'Hello';
const updateGreet = function(name) {
greeting = greeting + ', ' + name;
}
const printGreet = function(name) {
console.log(greeting + ', ' + name);
updateGreet(name);
}
return printGreet;
})();

greet('Andrew');
greet('Joseph');
greet('Bob');

此外,无论何时声明其引用不会更改的变量,都要确保使用 const - 它使代码更易于理解(对您和其他人而言)。

关于javascript - 我的闭包示例没有像我想的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50243323/

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