关于闭包中变量共享的问题

发布于 2022-09-02 00:25:39 字数 229 浏览 11 评论 0

Image
书上说最后调用constfuncs()后i=10,由于i在闭包中是被共享的,所以所有的数组值都是10。我不明白为什么会是10呢?funcs[]的0到9的索引不是已经赋值结束了吗?即使i等于10也没有被赋值啊?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

溺孤伤于心 2022-09-09 00:25:39

这个我已经知道了,然而怎么删掉问题?貌似,func那儿得到的是function的引用并不是值,所以会全部变成10。刚发完就发现了。

找回味觉 2022-09-09 00:25:39

这是一个和闭包有关的问题~~~
这个循环过程及赋值没有问题,问题出在函数执行时,每一个函数体在声明时绑定的都是constfuncs中声明的变量i,
当funcs数组中的函数去执行时,会查找这个变量的值,这个值在constfuncs中的循环结束后其值为10

孤单情人 2022-09-09 00:25:39

就我看,你是有两点不明白:
一个是i为10

另一个是为什么调用数组函数,结果都为10

第一个问题:i为10。循环没看明白吧,i为9的时候,循环还没有结束,只有i为10的时候,i<10是不成立的,终止循环。所以,终止循环时,i为10。

第二个问题,你也知道,数组函数返回的都是i,他是在调用的时候返回i,而不是直接在循环的时候定死了值。

所以,当i循环结束时,i已经为10了。然后,任你在什么时候调用数组里面的函数,其都是返回i,也就是10。

如果,要符合你的想法,也就是
arr[5]=5
arr[6]=6
...
这种,那在函数里面的写法就应该是这样:

for.....
arr[i]=i // 而不是func... return i
.....

最重要的是,其数组里面的每一个元素都是一个函数,且都返回i。你要知道的是,他不是在for循环的时候就调用了的函数,而是在for循环之后调用的,for循环之后,i已经为10了,所以,调用每一个数组函数,返回的值都是10

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文