【问题标题】:JS auto-increment with calling function parameterJS 带调用函数参数的自增
【发布时间】:2021-09-27 06:19:45
【问题描述】:

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

// 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。

【问题讨论】:

  • 错字? returns -> return?还有n好像没用?
  • 抱歉拼写错误
  • 你在做什么调用它一次,而不是返回增加的值。使用该递增值再次调用该函数。确保你有一个条件来打破递归循环。
  • 什么是formatter?看起来像一个属性什么的,但请提供自洽的语法。
  • 您应该提供有效的 JavaScript 语法。目前formatter 是一个标签。请提供对测试有用的对象表示法。

标签: javascript increment auto-increment


【解决方案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++)。

【讨论】:

    【解决方案2】:

    您的函数将在每次调用时创建 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

    【讨论】:

      【解决方案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);

      【讨论】:

        【解决方案4】:

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

        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());

        【讨论】:

          【解决方案5】:

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

          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()
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-08
            • 2014-04-02
            • 1970-01-01
            • 1970-01-01
            • 2017-09-29
            • 2010-11-25
            • 2014-01-12
            • 2016-11-13
            相关资源
            最近更新 更多