int*_*sik 2 javascript closures
我正在读一篇关于闭包如何工作的文章.我理解得差不多了,除了第5,在文章.
它正在讨论闭包如何使用此示例使用循环:
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
var item = 'item' + list[i];
result.push( function() {alert(item + ' ' + list[i])} );
}
return result;
}
function testList() {
var fnlist = buildList([1,2,3]);
// using j only to help prevent confusion - could use i
for (var j = 0; j < fnlist.length; j++) {
fnlist[j]();
}
}
testList();
Run Code Online (Sandbox Code Playgroud)
出现三个警报,每个警告都说明item3未定义.我明白为什么会说item 3.从封闭buildList函数持有引用到item,它不保存的实际值.
我没有得到的是为什么在线路的每个警报中list[i]都会回来.那个闭包还没有保留参数吗?undefinedresult.push...list
那个闭包还没有
list保留参数吗?
是.但价值i将等于list.length和list[list.length]是undefined.如果数组有长度3,则最高可访问索引2不是3:
var arr = [1,2,3];
console.log(arr[2]); // 3
console.log(arr[3]); // undefined
Run Code Online (Sandbox Code Playgroud)
相关:循环内部的JavaScript闭包 - 简单实用的例子
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |