【发布时间】:2018-10-16 14:52:03
【问题描述】:
这是我检查注册页面的代码。它说变量i 和j 已经定义,尽管它是局部变量而不是全局变量。在这种情况下我能做什么?如何在本地而不是全局制作变量?非常感谢您的帮助,我是计算机科学专业的新学生。
function checkName() { // בודק על
var n = document.getElementById("FullName").value;
var len = n.length;
var no = "!@#$%^&*()-_+=\'|][}{><./,;:?,";
var num = "0123456789";
if (n == "") {
document.getElementById("errName").innerHTML = "רשום את השם בבקשה";
return false;
}
for (var i = 0; i < n.length; i++) {
if (n.charAt(i) == " ") {
len--;
}
}
if (len < 2) {
document.getElementById("errName").innerHTML = "לא הגיוני שם עם אות אחת";
return false;
}
for (var i = 0; i < n.length; i++) {
if (n.charAt(i) >= "a" && n.charAt(i) <= "z") {
document.getElementById("errName").innerHTML = "לא הגיוני שם עם אותיות באנגלית";
return false;
}
}
for (var i = 0; i < no.length; i++) {
for (var j = 0; j < n.length; j++) {
if (no.charAt(i) == n.charAt(j)) {
document.getElementById("errName").innerHTML = "אסור תווים מיוחדים";
return false;
}
}
}
for (var i = 0; i < num.length; i++) {
for (var j = 0; j < n.length; j++) {
if (num.charAt(i) == n.charAt(j)) {
document.getElementById("errName").innerHTML = "אסור מספרים";
return false;
}
}
}
for (var i = 0; i < 3; i++) {
if (n[i] == ' ') {
document.getElementById("errName").innerHTML = "אסור רווחים בהתחלה";
return false;
if (n[i + 1] == ' ') {
document.getElementById("errName").innerHTML = "אסור רווחים בהתחלה";
return false;
}
}
}
document.getElementById("errName").innerHTML = "";
return true;
}
【问题讨论】:
-
只需添加
var i, j;并在您的 for 循环中,将var i = 0替换为i = 0并将var j = 0替换为j = 0。它告诉你的是,你在每个 for 循环中都重新声明了var i = 0,而变量i已经在第一个循环中声明了。 j也是如此。它与“全局”变量无关,而是由于在几个不同的循环中具有相同名称而导致的局部冲突。您可以在var num行之后添加这些声明。 -
好的,伙计们,我在开始时声明了 I, J 并删除了 var,现在它可以工作了,谢谢。
-
用 var 重新声明不应该抛出。我不明白上面的代码会如何抛出。我假设一些没有进一步提及的 linter,JSHint 出现在 google 中。
-
两次声明同一个变量实际上并不是一个错误,无论如何。这只是一种不好的做法,会使您的代码混乱。 (大概您发布此内容是因为您的 IDE 将其突出显示为一个问题。)
-
"它说变量 'i' 和 'j' 已经定义了" - 谁在说这个,在哪里?你在使用 linter 吗?
标签: javascript