web挖坑之路

js找元素下标索引以及闭包的学习

2018-09-25  本文已影响4人  不知道取个什么昵称不如娶个媳妇
 <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
 </ul>
var li_s = document.querySelectorAll("li");

第一种方法:自定义属性

        for(var i = 0 ; i < li_s.length ; i ++){
            li_s[i].index = i;
            li_s[i].onclick = function(){
                console.log(this.index);
            }
        }

第二种方法:数组

        for(var j = 0 ; j < li_s.length ; j ++){
            
            li_s[j].onclick = function(){
                var index = Array.from(li_s).indexOf(this);
                console.log(index);
            }
        }

第三种方法:let

        for(let i = 0 ; i < li_s.length ; i++){
            li_s[i].onclick = function(){
                console.log(i);
            }
        }

第四种方法:闭包

        for (var i = 0; i < li_s.length; i++) {
            li_s[i].onclick = clk(i);
        }

        // 命名函数
        function clk(num) {
                return function(){
                         console.log(num);
                   }
        }

关于闭包的学习

个人觉得,所谓闭包问题就是变量缓存的问题。也就是当外部函数消亡之后,内部函数所应用到的外部函数变量还存在的问题。
而闭包,其实就是能够使得外部函数变量缓存的奇葩内部函数。

闭包=内部函数+变量缓存(外部函数变量缓存)

闭包概念

函数嵌套,在内嵌函数中使用到外部函数的局部变量(即内嵌函数功能的实现依赖于外部函数中的局部变量),外部函数中返回了对内嵌函数的引用(在外部函数调用结束后还可以去引用到内部函数),这种情况就是闭包。
作用:延长函数体内部局部变量的生命周期。
当在函数外部还希望能够继续调用函数内部局部变量时,可使用闭包。

上一篇 下一篇

猜你喜欢

热点阅读