博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript--闭包
阅读量:5963 次
发布时间:2019-06-19

本文共 1480 字,大约阅读时间需要 4 分钟。

要想知道闭包是什么?

首先我们要知道匿名函数和自运行.

匿名函数:顾名思义就是没有名字的函数,当某个函数 function 关键字没有标识符的时候 就是匿名函数.

匿名函数常见的用法:

    * 函数表达式(var test = function(){})

    * 事件处理函数 (window.onload = funciont(){})

    * 自运行(立即执行)

    * 闭包里的返回值

而自运行呢?

自运行就是 能够自己运行的一个函数.字面意思就是不用别人调用就能够自己运行的函数,这是学习闭包的基础.

学习了基础 ,接下来我们就了解一下什么是闭包吧.

  官方解释:

    闭包 就是一个拥有很多变量 和绑定这些变量的还击的表达式 通常是一个函数, 这些变量也就是表达式的一部分.

     JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。

是不是看到这仍然不知道是个啥,哈哈哈和我当初一样.

其实通俗点来说:

闭包是指有权访问另外一个函数作用域中的变量的函数.可以理解为(能够读取其他函数内部变量的函数)--这是重点哦!

闭包有什么作用呢?

  

  正常函数执行完毕后,里面声明的变量被垃圾回收处理掉,但是闭包可以让作用域里的 变量,在函数执行完之后依旧保持没有被垃圾回收处理掉

* 可以读取函数内部的变量

* 让这些变量的值始终保持在内存中。

* 增加块级作用域

 

使用闭包应该注意哪些呢?

  

   由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。

     闭包会在父函数外部改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

 

话不多说 ,上个案例吧,带你更清晰的了解闭包.

* 示例:事件绑定

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8">

        <title></title>

        <ul>

            <li>1111</li>

            <li>2222</li>

            <li>3333</li>

            <li>4444</li>

            <li>5555</li>

        </ul>

    </head>

    <body>

    </body>

</html>

<script>

    let list = document.getElementsByTagName("li");

    

    for(var i=0; i<list.length; i++){

        //list[i].index = i;

        (function fun(i){//自运行

            list[i].onclick = function(){

                //alert(this.index+1);

                alert(i);

            }

        }(i));

    }

</script>

 

* 用闭包的方式实现mult(5)(6)(7),表示三个数的乘法(5*6*7)

    function fun(m){

        return function(n){

            return function(k){

                return m*n*k;

            };

        }

    }

 console.log(fun(5)(6)(7));

转载于:https://www.cnblogs.com/see-the-stars/p/10933054.html

你可能感兴趣的文章
varnish
查看>>
CentOS 7 笔记
查看>>
MySQL CSV file
查看>>
文件权限管理的扩展
查看>>
数据结构的研究对象
查看>>
EXTJS 4.0 核心代码分析 (一)
查看>>
如何让路由器使用起来更加便捷
查看>>
实现自动为用户映射网络驱动器
查看>>
Kali 2/3中启动带数据库支持的MSF
查看>>
java调用新浪微博API发布第一条微博
查看>>
django实用技巧:template模板的使用
查看>>
python正则表达式基础
查看>>
Git Flow
查看>>
Objective-C --- - UICollectionView (梳理总结)
查看>>
我的友情链接
查看>>
jsoup将外部样式修改为内嵌样式
查看>>
存储方案与存储产品之NAS篇
查看>>
鸟哥学习笔记---网络基本管理
查看>>
鸟哥学习笔记---SAMBA
查看>>
JSON.parse()和JSON.stringify()
查看>>