带调用函数参数的JS自动递增

问题描述

我们如何在带参数的函数中构建自增函数我有一个函数 - 当页面加载时,一些值在其中返回。喜欢

// val is the parameter which returns almost 1000 values

formatter: (val) => {
    var n = 0;
    function increment(i) {
     i++
    return i;
    }
    console.log(increment(n)) // result: 1/1/1/1/1/1/
//expected result: /1/2/3/4/5...
}

我想做的是格式化程序中的一个函数,它将值从 1 增加到最后一个 val。只是 12345...999 喜欢。每次 val 变化加 1 到 1。

解决方法

需要重新赋值n的值; i 在函数范围内增加,返回时,程序不会在任何地方使用。

这将按您的预期工作,例如(语法略有变化):

function formatter (val) {
    var n = 0;
    function increment(i) {
     i++
    return i;
    }
    console.log(n = increment(n)) // result: 1
//aspected result: /1/2/3/4/5...
console.log(n = increment(n))
console.log(n = increment(n))
console.log(n = increment(n))
console.log(n = increment(n))
}

formatter()

可以实现您正在做的事情(至少在语法方面),但是您需要使用全局变量或类变量,并且该函数将是多余的(您的 increment(n) 可以与n++)。

,

您的函数将在每次调用时创建 n 并将其重置为 0。

而是使用某个地方来存储最后生成的数字,它不是函数执行上下文的本地位置。例如,您可以使用 formatter 函数对象来存储最后生成的数字。

例如:

let obj = {
    formatter(val) { // Make it a `function`
        let i = this.formatter.i = (this.formatter.i || 0) + 1;
        console.log(i);
    }
};

obj.formatter(); // 1 
obj.formatter(); // 2
obj.formatter(); // 3

或者,为什么不为它保留一个属性,其中 formatter 是一个属性:

let obj = {
    n: 0,formatter(val) {
        ++this.n;
        console.log(this.n);
    }
};

obj.formatter(); // 1 
obj.formatter(); // 2
obj.formatter(); // 3

,

最多 10 个示例:

  • 使用 recursive 函数:

let obj = {
  formatter: (val) => {
    function increment(i) {
        console.log(i);
        if (i < 10) increment(++i);
    }
    increment(val);
  }
};

obj.formatter(1);

  • 使用 for() 循环:

let obj = {
  formatter: (val) => {
    for (i = val; i <= 10; i++) {
      console.log(i);
    }
  }
};

obj.formatter(1);

  • 使用 while() 循环:

let obj = {
  formatter: (val) => {
    while (val < 10) {
      console.log(++val);
    }
  }
};

obj.formatter(1);

,

提供一个闭包,并返回增量函数:

const incrementGenerator = () => {
  let n = 0;
  
  return function(){
    n++;
    return n;
  }  
}

var increment = incrementGenerator();

console.log(increment());
console.log(increment());
console.log(increment());
console.log(increment());

,

您可以使用以下代码自动增加数字

const formatter = () => {
  let n = 0;
  const increment = () => {
    return ++n;
  }
   
  console.log(increment()) // 1
  console.log(increment()) // 2
  console.log(increment()) // 3
  console.log(increment()) // 4
}


formatter()