javascript - 函数可以从先前的调用中访问其变量吗?
问题描述
我对范围和异步函数有点困惑。我了解它的核心,但我不知道我的问题是否与它有关,或者它是别的什么。A 创建了一个自定义插件:
(function ($) {
createCalendar = options => {
let elementID = randomString(32);
endLoad = () =>{
console.log(elementID);
$(`#${elementID} .inner .loader`).css('display', 'none');
}
[...]
getTimes(url)
.then((response) => {
console.log(elementID);
endLoad();
})
}
}(jQuery))
我多次调用此函数,因为我在一个页面上创建了 4 或 5 个日历。每个都有不同的 ID。这是一个 32 个字符长的字符串,因此不太可能相同。在函数中我调用getTimes
异步函数,在它的回调函数中我想删除日历中的加载器——每个日历都有它的加载器。但是,它只会删除最后一个日历的加载器。如果我尝试记录元素 ID,我会得到不同的结果。中的 console.logthen
给了我正确的值,所以在渲染 5 个日历并且每个都完成加载后,它会记录 5 个不同的字符串。然而,就在这个console.log
被执行之后,这个endLoad
函数就出现了,它记录了相同的值——每个日历的最后一个日历的 id。我以为是因为异步getTimes
函数是一个函数,它有自己的范围,变量是用它定义的,let
它不能从以前的调用中访问 createdID,这在理论上是一个不同的函数。或者 JS 是否认为它是同一个函数,因为同一个函数被多次调用?还是我的问题出在其他地方?
解决方案
推荐阅读
- cassandra - 如何在具有用户定义类型的表中插入值?
- python - Python-Pandas 将列转换为行
- python - 如何在 seaborn 的 lmplot 中添加比较线?
- angular - ng-bootstrap,带有动态 html 内容的弹出框
- python - 对要循环的外键对象求和
- python - 当类中的另一个相关实例变量发生更改时,如何更改实例变量?
- angular - 没有 FormControl 实例附加到具有名称的表单控件元素:
- firebase - Flutter - StreamProvider - 向 Firebase 发送重复出现的 XHR 请求
- python - 访问 GEKKO 最佳解决方案中的特定值
- flutter - Flutter Dart中EdgeInsetsGeometry类EdgeInsets类的区别?