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