关于闭包,实在没想清楚为什么出来是10?

[复制链接]
查看11 | 回复5 | 2021-1-27 06:18:48 | 显示全部楼层 |阅读模式
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:18:48 | 显示全部楼层
数字里面每个元素是一个匿名函数,当你执行arr[6]里面的函数的时候,i的值这个时候已经实际变成了10了啊,因为循环早已经结束了。换言之,10个数组里面的函数,访问的都是同一个变量i,而不是10个变量,访问i的时候,i的值已经变成了10.
回复

使用道具 举报

千问 | 2021-1-27 06:18:48 | 显示全部楼层
输出10就是因为没有用闭包。原因楼上已经说的很清楚了。
解决方法也就是加上一居闭包,让每次循环都单独在一个闭包内产生一个i变量。
vararr=[]
for(vari=0;i
vararr=[]
for(vari=0;i
在你里面执行每次push进去一个函数的时候,直接调用这个时候,所得到的的就是你想要的值,循环完之后在调用,这个时候i已经是10,不管你调用的是arr[1]()....arr[6]都是10

回复

使用道具 举报

千问 | 2021-1-27 06:18:48 | 显示全部楼层
vararr=[]
for(leti=0;i<10;i++){
arr.push(i)
}
回复

使用道具 举报

千问 | 2021-1-27 06:18:48 | 显示全部楼层
蟹蟹朋友们的解答




回复

使用道具 举报

千问 | 2021-1-27 06:18:48 | 显示全部楼层
https://www.cnblogs.com/fly_dragon/p/8669057.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行