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