我遇到了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/
答案 0 :(得分:1)
i
声明(通过var
)。它位于values
内,因此范围为values
。
next
和hasNext
都在values
内声明(由于是函数表达式)(并且通过声明另一个{{1}来掩饰i
在较窄的范围内)所以可以访问任何作用域的变量。
答案 1 :(得分:1)
当i
或next
访问hasNext
时,他们在自己的关闭中找不到i
,因此他们会查找一个关闭,在i
的关闭中找到values
(var i
发生的关闭)
这意味着对这两个函数中i
的更改和读取共享相同的i