作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图弄清楚闭包并创建了这个简单的示例,您在其中调用带有名称的函数 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/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!