javascript - JS函数变量看不到全局变量
问题描述
let numFlag = document.getElementById("numBTN-Flag");
let callFlag = document.getElementById("callScreen");
let callDisplay = document.querySelector(".numberCalling");
let callingText = document.querySelector(".connectText");
function callCancel() {
callFlag.style.display = "none";
numFlag.style.display = "block";
callDisplay.innerText = "";
display.innerText = "";
}
const answerNumber = () => {
numFlag.style.display = "none";
callFlag.style.display = "block";
let callDisplay = document.querySelector(".numberCalling");
callDisplay = callDisplay.innerText += display.innerText;
const callText = () => {
if (callDisplay.length >= 9) {
let callingText = document.querySelector(".connectText");
callingText = callingText.innerText = "łączę...";
setTimeout(function() {
let callingText = document.querySelector(".connectText");
callingText = callingText.innerText = "Trwa połączenie...";
// do zrobienia odliczanie
}, 4000);
} else {
let callDisplay = document.querySelector(".numberCalling");
callDisplay.innerText = "Zły numer";
}
};
callText();
};
在编写个人项目时,我遇到了一个小问题。这是一个小型手机模拟器,此时我面临“全球范围”问题的挑战。正如您在提供的代码中看到的,我在全局中有 4 个变量,但只有两个(numFlag和callFlag)可以正常工作。当涉及到callDisplay和callingText变量我每次需要时都必须调用它们,就像函数无法访问它们的全局版本一样。我尝试删除本地范围版本,并希望它可以在全局范围内运行,但它不会。我知道我现在可以这样(它应该像它那样工作)但是额外的变量只会使代码更难阅读和维护......而且它让我发疯,为什么它不起作用。所以请赐教:)
解决方案
发生这种情况是因为以下几行
callDisplay = callDisplay.innerText += display.innerText;
callingText = callingText.innerText = "łączę...";
callingText = callingText.innerText = "Trwa połączenie...";
他们正在覆盖callDisplay
和callingText
变量。
利用
callDisplay.innerText += display.innerText;
callingText.innerText = "łączę...";
callingText.innerText = "Trwa połączenie...";
相反,它会按你的意愿工作
let numFlag = document.getElementById("numBTN-Flag");
let callFlag = document.getElementById("callScreen");
let callDisplay = document.querySelector(".numberCalling");
let callingText = document.querySelector(".connectText");
function callCancel() {
callFlag.style.display = "none";
numFlag.style.display = "block";
callDisplay.innerText = "";
display.innerText = "";
}
const answerNumber = () => {
numFlag.style.display = "none";
callFlag.style.display = "block";
callDisplay.innerText += display.innerText;
const callText = () => {
if (callDisplay.innerText.length >= 9) {
callingText.innerText = "łączę...";
setTimeout(function() {
callingText.innerText = "Trwa połączenie...";
// do zrobienia odliczanie
}, 4000);
} else {
callDisplay.innerText = "Zły numer";
}
};
callText();
};
推荐阅读
- fedora - 为什么我在使用 Fedora 的 PC 上出现 Fortran“记录结束”错误,但在 Macbook 上却没有?
- javascript - 使用 Javascript 将所有“+”替换为“%20”
- ios - ARKit 图像识别——图像跟踪
- reactjs - 更改 react native 中导航的默认动画
- kotlin - 将多个时间序列数据集合并为一个
- html - IE 日期选择器太长
- html - 第一次点击下拉列表闪烁,弹出快速打开和关闭
- javascript - 组件在 setState() 后不重新渲染
- visual-studio-code - 什么是 Windows 的 VSCode 用户设置?
- python - Appium Python 中 for is_displayed() 中的 if-else 语句