这是因为变量pickedTerm
的作用域仅限于if语句内部。
JavaScript中的作用域
作用域是在执行过程中变量和表达式“可见”或可被引用的当前上下文。如果一个变量或表达式不在当前作用域内,则无法使用它。
JavaScript具有以下几种作用域:
- 全局作用域:脚本模式下运行的所有代码的默认作用域。
- 模块作用域:模块模式下运行的代码的作用域。
- 函数作用域:由函数创建的作用域。
关于作用域的更多信息,请参阅MDN文档:<a href="https://developer.mozilla.org/en-US/docs/Glossary/Scope" rel="nofollow noreferrer">Scope</a>
对于您当前的脚本,你需要在访问pickedTerm
变量的地方声明它。
所以解决方案如下所示,在事件监听器函数内部声明并初始化pickedTerm
变量:
const inputTerm = document.getElementsByName("terms")
propertyBtn.addEventListener("click", function () {
let pickedTerm = null; // 在此处声明并初始化pickedTerm变量
for (let i = 0; i < inputTerm.length; i++){
if(inputTerm[i].checked){
pickedTerm = inputTerm[i].value;
}
}
let propertyData = {
terms: pickedTerm,
title: inputTitle.value,
location: inputLocation.value,
};
push(addedPropertyInDB, propertyData);
});