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 带调用函数参数的自增的主要内容,如果未能解决你的问题,请参考以下文章