首页 > 其他 > 详细

利用闭包解决无法获取对应索引的问题

时间:2021-04-14 01:42:59      阅读:15      评论:0      收藏:0      [点我收藏+]

闭包: 

  闭包就是一个函数可以访问另外一个函数内部的变量。函数内部的变量很明显是一个局部变量。

  在JS中,我们所定义的任意一个函数,都可以看作是闭包。只不过最明显的存在与嵌套关系的函数中,内部的子函数 可以 访问父函数 中的变量。

  但是,我们想要从父函数的外部访问其内部的局部变量,该怎么实现?

  通过观察,发现子函数可以访问父函数的局部变量,所以我们尝试着让这个内部的子函数作为桥梁连通内外,让外部有能力去访问一个函数内部的变量。

  for(var i = 0; i < 10; i++){
        //一个函数就是一个闭包
        (function(j){
            setTimeout(function () {
                console.log("i:",j);
            },1000);
        })(i);
    }

上面的代码 :内层定时器函数引用外层IIFE传的值形成闭包。

      setTimout作外层函数,setTimeout的第一个回调函数作内层函数,内层引用外层的参数形成闭包。

 

例如:点击页面li中的内容,弹出 "您点击了第 N 条内容" 

第一种方法:

  利用this,对应索引的方法

  

 for(var i = 0; i < lis.length; i++) {
        lis[i].index = i;
        lis[i].onclick = function() {
            console.log(this.index)
            alert(‘您点击了第‘ + Number(this.index + 1) + ‘条内容‘)
        }
    }

第二种方法:

  利用闭包

for(var i = 0; i < lis.length; i++) {
        (function(j) {
            lis[j].onclick = function() {
                alert(‘您点击了第‘ + Number(j + 1) + ‘条内容‘)
            }
        })(i)
    }

 

利用闭包解决无法获取对应索引的问题

原文:https://www.cnblogs.com/yess/p/14655388.html

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