Javascript 不使用全局变量的迭代函数

Javascript 不使用全局变量的迭代函数,javascript,Javascript,我需要一个函数: 在第一次迭代时返回0,在每次下一次迭代时返回前一个数字加1,例如 第一次迭代-0 第二次迭代-1 第三次迭代-2 但是问题是它不接受任何参数,也不使用任何全局变量(或该函数之外的变量) 您知道如何在不使用任何全局变量的情况下实现它吗 可以对变量进行闭包并调用返回的函数 constfn=(i=>()=>i++)(0); console.log(fn()); console.log(fn()); console.log(fn())您可以通过在函数本身上定义属性来执行类似操作 函

我需要一个函数: 在第一次迭代时返回0,在每次下一次迭代时返回前一个数字加1,例如 第一次迭代-0 第二次迭代-1 第三次迭代-2

但是问题是它不接受任何参数,也不使用任何全局变量(或该函数之外的变量)


您知道如何在不使用任何全局变量的情况下实现它吗

可以对变量进行闭包并调用返回的函数

constfn=(i=>()=>i++)(0);
console.log(fn());
console.log(fn());

console.log(fn())您可以通过在函数本身上定义属性来执行类似操作

函数计数器(){
if(this.count==未定义){
this.count=-1
}
这个,伯爵++
把这个还给我,伯爵
}
let count=counter.bind({})
console.log(count())
console.log(count())
console.log(count())
console.log(count())

console.log(this.count)
您可以使用
Generator
函数来实现这一点

function*声明(function关键字后跟星号)定义了一个generator函数,该函数返回一个generator对象

生成器是可以退出然后重新输入的功能。它们的上下文(变量绑定)将在重新进入时保存

函数*getNumber(){
设计数器=0;
while(true){
产量计数器++;
}
}
常量生成器=getNumber();
console.log(generator.next().value);
console.log(generator.next().value);

console.log(generator.next().value) 您可以考虑使用生成器:

函数*increment(){
设指数=0;
while(true)
产量指数++;
}
var gen=增量();
console.log(gen.next().value);//0
console.log(gen.next().value);//1.
console.log(gen.next().value);//2
您可以使用创建具有永久设置上下文的函数。在这种情况下,您没有“全局”变量,因为您只需在函数中使用
this

const f=(函数迭代器(){
返回这个.i++;

}).bind({i:0})//你是说调用而不是迭代?循环迭代。“您知道如何在不使用任何全局变量的情况下实现它吗?”假设您指的是调用(即,
foo();foo();foo();
),如前所述,使用生成器可以工作,但调用方需要能够处理迭代器。还可以将状态作为函数对象本身的属性。我认为你必须提供更多的细节。向我们展示函数是如何调用的。只是不要将变量设为全局变量。它确实需要驻留在函数之外:
var count;{let i=0;count=()=>i++;}
。类似地,您可以使用IIFE实现相同的效果:
var count=(i=>()=>i++)(0)您可以基于此创建一个生成器。。。本页上有一个生成器示例。顺便说一句@Sohail ahh您是对的,我们可以通过使用bind:)来更改此示例。为什么我们必须使用bind tho?使用“this”关键字不符合要求?@hurit如果我不绑定,那么这将引用此处的全局对象您也可以绑定属性,那么您不需要检查它。哇,效果很好!谢谢,我对立即调用的函数一无所知