TypeScript 闭包中的变量赋值为何会影响外层函数的行为?

TypeScript 闭包中的变量赋值为何会影响外层函数的行为?

item = null;为何在后面却影响了前面函数中的item?

在给定的代码片段中,TypeScript将元素querySelectorAll中返回的NodeList转换为数组:

let divs = document.querySelectorAll('div');

登录后复制

然后,该数组被映射到一个新的数组,其中每个元素都是div:

divs.forEach(item => {  // ...})

登录后复制

在forEach函数的回调中,对每个item的addEventListener属性进行调用:

item.addEventListener('click', () => {  // ...})

登录后复制

这段代码绑定了一个点击事件,当div元素被点击时,该事件将执行一个匿名回调函数。请注意,item变量是一个闭包变量,它将指代其当前绑定的div元素。

然而,在回调函数之外有一个问题:

item = null;

登录后复制

这行代码将item变量赋值为null。问题在于,item变量同时指向回调函数中使用的div元素和原始的forEach回调中使用的div元素。

由于这是相同的变量,因此将item赋值为null将同时修改回调函数中的item变量和原始forEach回调中的item变量。

这意味着当点击事件触发时,回调函数中的item变量已经是null,即使它之前被绑定为div元素。这就是为什么在回调函数中console.log(item)将输出null的原因。

总结:

TypeScript中的闭包变量可以让一个函数访问其外层函数中的变量,但值得注意的是,对该变量的任何更改都将影响外层函数的行为。在本例中,将item赋值为null会同时影响回调函数和原始forEach回调中的item变量。

以上就是TypeScript 闭包中的变量赋值为何会影响外层函数的行为?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2808370.html

(0)
上一篇 2025年3月8日 22:43:17
下一篇 2025年3月8日 22:43:23

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论