从 for 循环中的函数返回值

Returning a value from a function within a for-loop

我想要 运行 一个 for 循环,将屏幕宽度的每百分之一的数值附加到 div 中。这有效:

for (var i = 50, numbers = ""; i < limit; i+= 50) {
  if (num % 100 === 0) {
    numbers += i;
  }
}

document.getElementsByClassName("width")[0].innerHTML = numbers;

但是当我尝试在循环中调用一个函数时它并没有:

for (var i = 50, numbers = ""; i < limit; i+= 50) {
  insertVal(i, numbers);
}

document.getElementsByClassName("width")[0].innerHTML = numbers;

function insertVal(i, container) {
  if (i % 100 === 0) {
    container += i;
  }
}

我不确定 return 值应该是多少,以便将数值插入 div。

JSFiddle

Return container 从你的函数中,然后传回。

https://jsfiddle.net/un9uj7nb/5/

for (var i = 50, numbers = ""; i < limit; i+= 50) {
    numbers = insertVal(i, numbers);
}

document.getElementsByClassName("width")[0].innerHTML = numbers;

function insertVal(i, container) {
    if (i % 100 === 0) {
        container += i;
    }
    return container;
}  

你需要A在循环中设置numbers你需要Breturncontainer 来自你的函数,

for (var i = 50, numbers = ""; i < limit; i += 50) {
    numbers = insertVal(i, numbers); // A
}

document.getElementsByClassName("width")[0].innerHTML = numbers;

function insertVal(i, container) {
    if (i % 100 === 0) {
        container += i;
    }
    return container; // B
}

但是,这比您的工作循环效率低,因为每个函数调用都很昂贵


如果您以后再回到此代码,您在这里传递 numbers 的方式可能会让人感到困惑。如果有必要在这里使用函数,您可能需要考虑这两种代码模式之一

测试它自己的方法,给出一个 布尔值(等效) 值,这样你就知道输入没问题

function test(i) {
    return i % 100;
}

for (var i = 50, numbers = ""; i < limit; i += 50) {
    if (test(i))
        numbers += i;
}

document.getElementsByClassName("width")[0].innerHTML = numbers;

测试给出的结果可能是您感兴趣的输入的转换或预期的错误结果,例如null

function test(i) {
    if (i % 100)
        return i;
    return null;
}

for (var i = 50, numbers = "", e; i < limit; i += 50) {
    e = test(i);
    if (e !== null)
        numbers += e;
}

document.getElementsByClassName("width")[0].innerHTML = numbers;

@CarlEdwards deduplication is an acceptable reason to write functions for these. However, if the loop is almost exactly the same consider if you can move the for itself into the loop too

考虑这个例子,其中循环在函数内部 my_loop,这意味着您可以重用代码但只调用函数两次

function my_loop(i, j) {
    for (var numbers = ""; i < j; i+= 50) {
        if (i % 100 === 0) {
            numbers += i;
        }
    }
    return numbers;
}

document.getElementsByClassName("width")[0].innerHTML = my_loop(50, limit);
document.getElementsByClassName("width")[1].innerHTML = my_loop(250, limit2);