闭包的理解

2021-09-23  本文已影响0人  东邪_黄药师

什么是闭包

闭包(closure)指有权访问另一个函数作用域中变量的函数。
①函数嵌套函数
②函数内部可以引用函数外部的参数和变量
③参数和变量不会被垃圾回收机制回收

function fn() {
        var num = 10;
        return function () {
            console.log(num);
        }
    }
    var f = fn();
    f();
image.png
注:我们fun 这个函数作用域 访问了另外一个函数 fn 里面的局部变量 num

2.闭包的作用

闭包的主要作用: 延伸了变量的作用范围

3.闭包的优缺点

<ul class="nav">
        <li>榴莲</li>
        <li>臭豆腐</li>
        <li>鲱鱼罐头</li>
        <li>大猪蹄子</li>
    </ul>
  var lis = document.querySelector('.nav').querySelectorAll('li');
        for (var i = 0; i < lis.length; i++) {
            // 利用for循环创建了4个立即执行函数
            // 立即执行函数也成为小闭包因为立即执行函数里面的任何一个函数都可以使用它的i这变量
            (function(i){
                lis[i].onclick = function() {
                    console.log(i)
                }

            })(i)
        }
<ul class="nav">
        <li>榴莲</li>
        <li>臭豆腐</li>
        <li>鲱鱼罐头</li>
        <li>大猪蹄子</li>
    </ul>
var lis = document.querySelector('.nav').querySelectorAll('li')
    for (var i = 0; i < lis.length; i++) {
            (function(i) {
                setTimeout(function() {
                    console.log(lis[i].innerHTML);
                }, 3000)
            })(i)
        }
var car = (function(){
        var start = 13; // 起步价  局部变量
        var total = 0; // 总价  局部变量
        return {
            // 正常的价格
            price:function (n) {
                if ( n<=3 ) {
                    total = start
                } else {
                    total = start + (n-3) * 5
                }
                return total
            },
            yd: function (flag) {
               return flag ? total + 10 : total
            }
        }
     })()
     console.log(car.price(5))
     console.log(car.price(4))
     console.log(car.yd(4))
image.png
上一篇 下一篇

猜你喜欢

热点阅读