• javascript匿名函数与闭包


    匿名函数是相对于有名字的函数

    如function setAge(){}函数名为setAge

    而类似于function(){}则就是一个匿名函数

    有名字的函数执行时可以写成setAge(),而没有名字的函数则执行要写成(function())();

    另一种方式是把匿名函数赋值给一个变量来使用

    var a=function(){
    alert("hello,world");
    }
    a();

    匿名函数传参

    (function(age){
    return age;
    
    })(100);

    匿名函数产生闭包

    闭包简单来说就是一个函数里面还有函数(一般来说是匿名函数),看代码:

    function box(){
    var a=10;
    return function(){
    alert("hello")
     }
    }
    box()//返回function(){ alert("hello") }一串代码
    box()()//再加一个()才执行了匿名函数,返回hello

    关于闭包解释,上面的说明太粗俗了,下面具体说明

    有权访问另一个函数作用域内变量的函数都是闭包

    闭包源于js作用域链问题,在js中局部变量可以直接访问全局变量,而全局变量无法访问局部变量

    function box(){
    var a=10;

    }

    alert(a)//未定义,全局无法访问函数体内的var a=10变量,但有时我们需要外部能够取得这个局部的a变量,这时我们怎么做呢?闭包方式来了

    利用js中局部变量可以直接访问全局变量,而全局变量无法访问局部变量这一原理,我们在box(){}内再构建一个函数,这事var a对于这个新构建的函数来说就是他的“全局变量”

    例如

    function getCircle(){
    var pi=3.1415926;//局部变量,怎样要外面的alert取得pi呢
    return function (){//写一个函数,这个函数可以取得pi的值
      return pi;//这个pi值一旦调用getCircle()就可以return出匿名函数里的这个pi
    }
    }
    alert(getCircle()());

    使用闭包的好处有什么?

    在js中一旦function执行完毕,里面的变量都会被垃圾回收,被销毁,可以这样理解,js中局部变量优先于全局变量执行,函数体执行完毕后,就被销毁,所以全局变量就无法访问局部了。在一些情形中,我们需要将局部变量保存下来,我们就要用到闭包了。

    总结:闭包好处:

    一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 

    function box(){
    var a=0;
    return function(){
        a=a+1;
    return a;
    }
    }
    var b=box();
    b();//1
    b();//2

    每次执行一次b() var a都不会清零,而是保留了上次的结果!

  • 相关阅读:
    window 文件共享分享 yongqi
    SQL Server更改表字段顺序和表结构 不懂01的ITer
    SQL Server更改表字段顺序和表结构 yongqi
    serversql 获取中位数 yongqi
    Redis 如何 Windows 后台运行 redisserver.exe yongqi
    pandas 连接数据库 yongqi
    明势资本黄明明:创新与世界,下一代基础软件的中国突围之路
    TDengine 支持多种写入协议,四种写入方式提效大全
    重磅升级!TDengine3.0 正式发布
    TDengine3.0计算查询引擎的优化与升级
  • 原文地址:https://www.cnblogs.com/luojunweb/p/7056316.html
Copyright © 2020-2023  润新知