问题描述
我们如何在带参数的函数中构建自增函数。我有一个函数 - 当页面加载时,一些值在其中返回。喜欢
// 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()