• js高级闭包的理解及应用


    一、闭包(Closure)的概念

    指有权访问另一个函数作用域中变量的函数 --javascript高级程序设计
     
    简单理解 一个作用域可以访问另外一个函数内部的局部变量 【被访问的变量所在的函数 就是一个闭包函数】
     
    也可以把闭包理解为一种现象
     
    主要作用:延伸了变量的作用范围
     
    例如:
    function fn(){
            var num = 1;
          function fun(){ //在fun函数中可以访问 fn函数内部的 局部变量num,所以形成了闭包
                console.log(num)
            }
            fun();
    }
    fn() // fn就是闭包函数

    二、闭包的应用

    1.循环注册点击事件

            //1.先获取元素
            var buttonList = document.getElementsByTagName("button");
            //2.添加事件
            for (var i = 0; i < buttonList.length; i++) {
                (function (i) {
                    buttonList[i].onclick = function () {
                        console.log(i)
                    }
                })(i)
            }

    2.循环中的定时器,每隔一秒输出

            for (let i = 0; i < buttonList.length; i++) {
                (function (i) {
                    setTimeout(function () {
                        console.log(i)
                    }, i * 1000)
                })(i)
            }

    3.计算打车价格

            // 规则:
            // 1.如果是正常行驶,三公里及以内,起步价12元;超出三公里的部分,每公里收5元。
            // 2.如果出现拥堵,总价多收10元
            var car = (function () {
                var start = 12;
                var total = 0;
                return {
                    price: function (n) {
                        if(n<=3){
                            total = start;
                        }else{
                            total = start + (n - 3) * 5;
                        }
                        return total;
                    },
                    jam:function(flag){
                        return total = flag ? total + 10 : total;
                    }
                }
            })();
    
            console.log(car.price(5)) // 22
            console.log(car.jam(true)) // 32
            console.log(car.jam(false)) // 32
    
            console.log(car.price(1)) // 12
            console.log(car.jam(true)) // 22
            console.log(car.jam(false)) // 22
  • 相关阅读:
    AMap公交线路查询
    AMap行政区查询服务
    使用JavaScript的Join方法
    获取layer.open弹出层的返回值
    MVC项目中WebViewPage的实战应用
    ASP.NET管道
    Android接收系统广播
    python字符串转换成数字
    mysql缓存
    两个矩阵对应位置的数据相加,并返回一个矩阵
  • 原文地址:https://www.cnblogs.com/CaktyRiven/p/16197635.html
Copyright © 2020-2023  润新知