首页 > 编程语言 > 详细

javasript学习之闭包

时间:2019-05-18 16:45:00      阅读:75      评论:0      收藏:0      [点我收藏+]

闭包

闭包是函数和声明该函数的词法环境的组合。

var list = document.getElementsByTagName("input");
        for (var i = 0; i < list.length; i++) {
            list[i].onclick=function(){
                console.log(i);
            }
        }

由于闭包的原因会导致输出的值为一样

为什么会这样了

当点击时会回调方法,而i为共享参数。导致回调时,i都为最终结果。

如何解决该问题

var list = document.getElementsByTagName("input");
        for (var i = 0; i < list.length; i++) {
                list[i].onclick = num(i);
            

        }
        function num(index){
            return function(){
                console.log(index);
            }
            
        }

再创建一个闭包,使其调用时,使用闭包的参数,而不是父函数的参数;

每次创建函数都会创建新的变量,而不会使用共享变量。

let关键词

减少闭包的使用

var list = document.getElementsByTagName("input");
        for (var i = 0; i < list.length; i++) {
        let item = i;
            list[i].onclick=function(){
                console.log(item);
            }
        }

这个例子使用let而不是var,因此每个闭包都绑定了块作用域的变量,这意味着不再需要额外的闭包。

var与let的区别

var作用域为全局,内部var会影响外部var的值

而let只作用在当前块中,不会影响外部数据。

参考资料

闭包

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

let

https://www.runoob.com/js/js-let-const.html

javasript学习之闭包

原文:https://www.cnblogs.com/ldnanchao/p/10886128.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!