这是我检查注册页面的代码。它表示变量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;
}
答案 0 :(得分:0)
Javascript有function scope,因此使用var
定义函数中的任何变量都会使其在整个函数中存在。
在每个for
循环中,您使用i
重新定义var i = 0
。例如:
for (var i = 0; i < n.length; i++) {
if (n.charAt(i) == " ") {
len--;
}
}
...
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;
}
}
}
您可以在功能顶部添加var i;
,只需在循环中说出i=0
,这样就不会多次定义它。
答案 1 :(得分:0)
尝试使用新的ES6 let
代替var
来声明函数/项目中的变量。
这将解决您的全局名称范围问题。
您可以在此处阅读更多内容https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
答案 2 :(得分:0)
您需要查看function scoping
。由于var
具有定义它的函数范围。
因此,在您的情况下,variable i
可以访问checkName
函数内部。使用let
可以帮助您完成上述方案。