Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数重写在其他作用域中声明的变量_Javascript - Fatal编程技术网

Javascript 函数重写在其他作用域中声明的变量

Javascript 函数重写在其他作用域中声明的变量,javascript,Javascript,我必须使用I作为迭代器来处理这两个函数。 一个函数正在使用另一个函数。 我认为局部变量不能被其他作用域改变。 但是现在“i”在“createOptions”函数之后发生了变化。 该值是否可能由对象传递 function createOptions(array) { var optionArray = []; for (i=0;i<array.length;i++) { var option = $("<option><

我必须使用I作为迭代器来处理这两个函数。 一个函数正在使用另一个函数。 我认为局部变量不能被其他作用域改变。 但是现在“i”在“createOptions”函数之后发生了变化。 该值是否可能由对象传递

    function createOptions(array) {
       var optionArray = [];
       for (i=0;i<array.length;i++) {
         var option = $("<option></option").text(array[i]);
         $(option).attr("value", array[i]);
         optionArray.push(option);
       } 
       return optionArray;
     }

     function buildForm(players) {
       var form = $("<form></form>");
       for (i=0; i<4; i++) {
         var playernumber = "player " + (i+1).toString();
         var select = $("<select></select>").attr({
          "id" : playernumber,
          "onchange" : "addNewPlayer(this)"
         });
         var selectPlayerOption = $("<option></option>").text("-- select Player --");
         $(selectPlayerOption).attr({
           "disabled" : true,
           "selected" : true
         })
         var newPlayerOption = $("<option></option>").text("New Player");
         var playerOptions = createOptions(players);
         console.log(playerOptions.j);
         $(select).append(selectPlayerOption, newPlayerOption, playerOptions);
         $(form).append(select); 
       }
       $("#maincontent").append(form);
     }
函数createOptions(数组){
var optionArray=[];

for(i=0;i如果您像
i=0
这样创建变量,即使它位于
for
循环中,仍将创建为全局变量

建议改为:

for (let i=0; i < array.length; i++) {
   // your code
}
for(设i=0;i
进一步了解
let


我希望这会有帮助!

这很正常,您的函数buildForm使用I作为迭代器,当在buildForm函数中调用CreateOption时,它的值会被重新指定为0,因为这行代码是(I=0;ideclare它作为作用域变量而不是全局…
(设i=0;…
当您不使用
var
let
const
声明变量时,它将变为全局变量,您甚至可以通过窗口访问它。variableName这可能是您不想要的。您确定您已经在某个地方定义了变量
i
?定义它的
var
关键字在哪里?:P"本地变量不能被其他范围改变。“代码> > < <代码>不是本地变量——它是全局变量。为什么不简单地声明它们是本地的,这样它们就不会发生冲突?使用共享的全局不在所有的范围内。是的,这是一种可能性,但不是最好的做法,如果我们认为它是使用不支持D的ECMAScript版本的话。将变量与“let”语句
var
局部共享将声明该变量为局部变量。局部变量是函数,但不会与另一个局部变量冲突。只需
let
/
const
即可创建变量块级别。