美文网首页
第二十章 闭包和cookie

第二十章 闭包和cookie

作者: 扶光_ | 来源:发表于2021-06-02 13:14 被阅读0次

一,闭包

  • 概念:在函数外部访问其内部的局部变量的函数叫做闭包。
  • 原理:通过匿名函数 将局部变量驻留在内存当中,达到全局变量的效果
  • 类型:函数(其实闭包也就数一个函数)
  • 作用:访问另一个函数作用域中的变量

讲闭包之前首先先说一下自执行函数

那么什么是自执行函数呢
自执行函数也就拉姆达函数
写法:

          (function(){

                函数体
         })()

作用:他会自己主动触发里面的事件
如:

(function(x){  //他也可以传参
        alert(x)
        })(258)
自执行函数
如图他可以主动去执行里面的函数体
说说他的优缺点
由于外部无法引入内部变量,所以执行完以后内存很快被释放掉 不会污染全局对象
  • 优点

1.不会污染全局对象
2.定义和调用合为一体


创建闭包的方式

创建闭包的常见方式就是在一个函数内部创建另一个函数,通过另一个函数来访问这个函数的局部变量

function Person(){
        var name1 = "哈哈哈"
        //闭包就是一个函数
        return function(){
            return name1
        }
    }
    //可以通过闭包可以访问私有变量
    console.log(Person()());
闭包

全局变量

举例:如我们想要一个自增的变量,我们需要创建一个全局变量来进行自增 如这样

  <script>
     //全局生命周期在页面关闭之后
    var num  = 0;
    function a(){
        num++;
        console.log(num);
    } 
    setInterval(a,1000)
    </script>
全局变量

但用局部变量如何去实现呢?

局部变量

 function add(){
        var x = 0;
        return function(){
            x++;
            return x;
        }
    }
    console.log(add()());
    console.log(add()());

我们猜一下这样用闭包的实现 控制台输出的会是1和2吗


并不会,因为每次调用add()的时候都会从0开始
解决方法
function add(){
        var x = 0;
        return function(){
            x++;
            return x;
        }
    }

    var addFn = add();
    console.log(addFn());
    console.log(addFn());
解决方案
闭包的优缺点
  • 优点
    减少了全局变量的使用频率,防止污染
  • 缺点
    闭包作用域返回的局部变量不会及时呗释放,所以可能占用更多内存,过多会导致内存遗漏

那么如何来解决这个缺点呢?就是释放内存
设置null释放内存

 <script>
    function add(){
        var x = 0;
        return function(){
            x++;
            return x;
        }
    }
    var addFn = add();
    console.log(addFn());
    console.log(addFn());
      //设置null释放内存 
      addFn = null;
    console.log(addFn());
    </script>
这样就被释放掉了

二,cookie

cookie 本地客户端存储相关数据 是由网景公司设计的

  • cookie的组成

名/值 组成 name = value[expires=date]
[]里面代码的是日期 数据存储周期
下面我们来设置一个cookie

document.cookie = "user=侯旭"
        alert(document.cookie)
cookie

那么它存在哪里呢?怎么去看到他呢?


位置

然后说两种方法

  • 1.encodeURIcomponent() 编码
  • 2.decodeURIcomponent() 解码
    用法
 document.cookie = "user="+encodeURIComponent("侯旭");
        alert(document.cookie)

他会像把密码加密一样,变成一段编码


编码

如果我们需要解析成我们可以看懂的数据,再用上面的解码decodeURIComponent(需要鞋码的数据)。

如何设置过期时间

如 我们要设置一个七天之后自动过期的cookie
今天的日期是2021年6月2日

 //设置过期时间 
        // setDate() 设置月份中的某一天 
        var date = new Date();
        date.setDate(date.getDate()+7) //时间是一周以后
        document.cookie = "user="+encodeURIComponent("侯旭")+";expires="+date;
        alert(decodeURIComponent(document.cookie))
过期时间

删除cookie

将日期时间设置为0 或更提前就可以删除cookie了

相关文章

  • 第二十章 闭包和cookie

    一,闭包 概念:在函数外部访问其内部的局部变量的函数叫做闭包。 原理:通过匿名函数 将局部变量驻留在内存当中,达到...

  • 11大模块前端核心技术总结

    模块一:JavaScript篇 闭包,原型,数组方法,this指向,DOM,手写Promise,Cookie等 模...

  • 第三周第二天

    第三周第二天 函数作为参数,匿名函数(闭包)尾随闭包 闭包,尾随闭包 数组的过滤,缩减,映射

  • JS闭包+Session和Cookie的区别和联系

    看了下面两篇博客你就大概懂了(搬运工) JS闭包:【文章链接】Session和Cookie的区别和联系:【文章链接】

  • rust 闭包与同步

    rust 闭包与同步 rust 闭包 rust闭包中主要包括两个部分,闭包参数和闭包环境变量。闭包函数和函数参数使...

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • iOS swift 逃逸闭包(@escaping)和非逃逸闭

    iOS swift 逃逸闭包(@escaping)和非逃逸闭包 (@noescaping) 逃逸闭包: 逃逸闭包...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • Swift3.0-代理和闭包的简单使用

    用代理和闭包进行逆向传值 闭包 在第二个页面写一个闭包(要传的值是字符串, 整型, 字典)typealias In...

  • 2021年 面试

    泽怡科技 性能优化 promise 防抖节流 缓存机制 cookie、localstorage 原型链、闭包 lo...

网友评论

      本文标题:第二十章 闭包和cookie

      本文链接:https://www.haomeiwen.com/subject/itansltx.html