gpt4 book ai didi

javascript - 函数无法访问其他函数创建的变量(闭包)

转载 作者:行者123 更新时间:2023-12-01 01:45:30 27 4
gpt4 key购买 nike

在我的代码中,我选择一些 HTML 输入并添加 footComparer 函数作为回调。

我试图通过添加一个辅助对象来稍微简化我的代码,该对象将包含一些辅助函数。

问题是当它到达这一行时:

 selectedSearchDropdown.style.display = '';

它抛出一个引用错误:

selectedSearchDropdown is not defined.

我很难理解为什么闭包在这里不起作用。 footComparer 函数不是应该可以访问 selectedSearchDropdown 变量吗,因为它作为闭包保留在内存中?

const searchInputs = document.querySelectorAll('.searchBox__input');
searchInputs.forEach(input => input.addEventListener('input', footComparer));

function footComparer(e) {
helpers.elementSelector(e);
selectedSearchDropdown.style.display = '';
}

let helpers = {
elementSelector: function (e) {
let selectedSearchDropdown = e.target.parentNode.childNodes[3];
}

最佳答案

检查 let 到底是什么:doc .

我建议您阅读那本书(在 github 上免费): You don't know JS 。它应该可以帮助您理解范围、闭包等。

基本上,let 关键字在特定 {} 内创建变量。 let 使您有权声明范围仅限于 block 、表达式语句的变量,这与 var 不同,因此 let 仅在内部可用那个特定的 block 。

var 是一个关键字,它在全局范围内定义变量,而与 block 作用域无关。

关于javascript - 函数无法访问其他函数创建的变量(闭包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52003245/

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