查询Javascript关闭

时间:2014-07-30 11:57:05

标签: javascript

我遇到了David Herman撰写的有效Javascript书中的JS函数。我复制了下面的代码。我只是想知道当“i”仅在下一个函数中递增时,“i”的更新值如何在hasNext函数中可用。

的Javascript

function values() {
    var i = 0, n = arguments.length; a = arguments; 
    return {
        hasNext: function() { 
            alert(i);
            return i < n;
        },
        next: function() {
            if (i >= n) {
                throw new Error("end of iteration");
            }
            return a[i++];
        }
    };
}

var it = values(1, 4, 1, 4, 2);

的jsfiddle: http://jsfiddle.net/G42Ev/

2 个答案:

答案 0 :(得分:1)

第2行

i 声明(通过var)。它位于values内,因此范围为values

nexthasNext都在values内声明(由于是函数表达式)(并且通过声明另一个{{1}来掩饰i在较窄的范围内)所以可以访问任何作用域的变量。

答案 1 :(得分:1)

inext访问hasNext时,他们在自己的关闭中找不到i,因此他们会查找一个关闭,在i的关闭中找到valuesvar i发生的关闭)

这意味着对这两个函数中i的更改和读取共享相同的i