0

我不明白调用这个函数是如何工作的

function setup(x) {
    var i = 0;
    return function () {
        console.log(i);
        return x[i++];

    };
}

var next = setup(['a', 'b', 'c']);

console.log(next());//a
console.log(next());//b
console.log(next());//c

i每次调用如何不重置为0?

4

2 回答 2

1

在您的代码中:

> function setup(x) {
>     var i = 0;

调用时setup,将使用局部变量xi. 执行开始时,x为传递的数组分配一个值并i设置为零。

>     return function () {
>         console.log(i);
>         return x[i++];
>     };

返回此匿名函数。它对位于其作用域链上的外部执行对象有一个闭包(全局执行对象也是如此)。

i所以它对and都有一个闭包x,其值现在只能由函数更改。

> }
>
> var next = setup(['a', 'b', 'c']);

返回的函数被分配给next,因此它不再是匿名的。

> 
> console.log(next());//a

当此行执行时,next返回x[0],即“a”,并递增i到 1。

> console.log(next());//b

当该行执行时,next返回x[1],即“b”,并递增i到 2。

> console.log(next());//c

当此行执行时,next返回x[2],即“c”,并递增i到 3。

于 2013-03-05T08:45:23.320 回答
0

i不会重置,因为它是在分配给 的函数之外设置的next。实际上就在它的正上方。

于 2013-03-05T08:15:21.950 回答