js问题,为什么我这样写验证码是错的?

function scc(n){
                  
                  for(var i = 0; i < n; i++){
                        var arr = [];
                        var num = parseInt(Math.random() * 123);
                        if(num >=0 && num <= 9){
                              arr.push(num);
                        }else if(num >= 97 && num <= 122 || num >= 65 && num <= 90){
                              arr.push(String.fromCharCode(num));
                        }else{
                              i--;
                        }
                  }
                  return arr.join("");
            }
            alert(scc(6));

为什么我把var arr = [];写在for循环里面就是错的?

我认为写在for循环里面也可以每次push一个数字或者字母上去啊?

谁能告诉我里面的完整逻辑思路是什么,不胜感激

    function scc(n) {
        var arr = [];
        for (var i = 0; i < n; i++) {
//如果写里面每次都把arr又赋值为[]空数组了
            var num = parseInt(Math.random() * 123);
            if (num >= 0 && num <= 9) {
                arr.push(num);
            } else if (num >= 97 && num <= 122 || num >= 65 && num <= 90) {
                arr.push(String.fromCharCode(num));
            } else {
                i--;
            }
        }
        return arr.join("");
    }
    alert(scc(6));

你这个始终都只有一个吧,每次循环都新var了一个arr且赋值为[]

因为你在循环外边调用arr了(return arr.join("");),你声明在循环里面属于内部变量,只生效于for循环里。你在循环外使用的话就得声明在循环外边