JS 带调用函数参数的自增

Posted

技术标签:

【中文标题】JS 带调用函数参数的自增【英文标题】:JS auto-increment with calling function parameter 【发布时间】: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 是一个标签。请提供对测试有用的对象表示法。 【参考方案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()

【讨论】:

以上是关于JS 带调用函数参数的自增的主要内容,如果未能解决你的问题,请参考以下文章

js函数带参调用

在动态THML语句中调用JS函数传递带空格参数的问题

如何在 js 字符串模板文字中调用带参数的函数? [关闭]

调用js函数时,参数带单双引号怎么解决?

解决 js setTimeout 传递带参数的函数无效果

JavaScript 中怎么不带括号的调用函数