变量是否已使用局部变量定义?怎么样?

时间:2018-05-06 18:49:23

标签: javascript

这是我检查注册页面的代码。它表示变量ij已经定义,虽然它是局部变量而不是全局变量。在这种情况下我该怎么办?如何在本地制作变量而不是全局变量?非常感谢帮助,我是计算机科学的新生。

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;
}

3 个答案:

答案 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,这样就不会多次定义它。

考虑使用let in newer JS versions

答案 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可以帮助您完成上述方案。