3 回答

TA贡献1872条经验 获得超4个赞
您没有使用var,let或const语句来声明i,因此它被视为全局变量。
这意味着i您在silnia函数中使用的相同我在for它外部的循环中使用的相同;本质上,它外面的循环运行一次,silniai增加到 6,一旦它返回到for全局范围内的循环,它就会停止,因为i>koniec.length(ETA:它然后尝试访问,sylnia(5)[6]因为i在那个时间点等于 6,这是未定义的)
试试这个:
function silnia(n) {
var wynikSilni = [];
for (var i = 1; i < (n + 1); i++) {
wynikSilni.push(i);
}
return wynikSilni;
}
koniec = [1, 2, 3];
for (var i = 0; i < koniec.length; i++) {
// Returns only undefined:
console.log(silnia(5)[i]);
// Works no problem:
// console.log(silnia(5)[2]);
}

TA贡献1993条经验 获得超6个赞
现在是 2019 年,Arrays 有很多有用的方法可以消除设置和管理循环计数器的需要,正如其他人指出的那样,这是您问题的根源。
Array.forEach() 是其中最简单的,将有助于大大简化您的问题:
koniec = [1,2,3];
// Loop over the knoiec array
// .forEach requires a callback function to execute
// upon each loop iteration. That function will automatically
// be passed 3 arguments: the array item, the item index, the array
koniec.forEach(function(item, index){
console.log(silnia(5)[index]);
});
function silnia(n){
var wynikSilni = [];
for(i = 1; i < (n + 1); i++){
wynikSilni.push(i);
}
return wynikSilni;
}

TA贡献1850条经验 获得超11个赞
您需要声明变量,否则所有函数都使用全局变量。
function silnia(n) {
var wynikSilni = [];
for (var i = 1; i < (n + 1); i++) { // use var or let
wynikSilni.push(i);
}
return wynikSilni;
}
var koniec = [1, 2, 3];
for (var i = 0; i < koniec.length; i++) { // use var or let
console.log(silnia(5)[i]);
}
添加回答
举报