首页 > 解决方案 > 函数可以从先前的调用中访问其变量吗?

问题描述

我对范围和异步函数有点困惑。我了解它的核心,但我不知道我的问题是否与它有关,或者它是别的什么。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它不能从以前的调用中访问 c​​reatedID,这在理论上是一个不同的函数。或者 JS 是否认为它是同一个函数,因为同一个函数被多次调用?还是我的问题出在其他地方?

标签: javascript

解决方案



推荐阅读