zoukankan      html  css  js  c++  java
  • js闭包

    闭包是js的一个特点,也是一个难(坑)点。我也研究闭包研究了一段时间,也有了一点收获,下面把我的收获分享给一下。

    了解闭包前我们需要搞清楚变量作用域,就是全局变量和局部变量。

    js中任何函数可以访问全局变量,但是局部变量除了访问自己内部的局部变量和自己上级的局部变量之外无法访问别的函数的局部变量。

         function foo(){
                var i=2;
                var n=3;
                var m=4;
            }
           
           function fun(){
               alert(i,n,m);
           }
           fun();
           //undefind,undefind,undefind

    然而在开发当中我们往往需要访问别的函数的局部变量这改怎么办?

    那就是函数里面写函数,这样里面的函数可以访问外面的函数的全部变量,而外面的函数访问不了里面函数的变量(这就是传说中的作用域链)

       var par = parent();
             par();
         //12
    
       function parent(){
                var i=2;
                var n=3;
                var m=4;
               
                return function(){
                    i++;
                    n++;
                    m++;
                    console.log(i+n+m);
                }
            }

    然而这个parent函数里面的匿名函数就是传说中的闭包。

    到这里看出来闭包其实就是能够访问其他函数局部变量的函数。

    我这里写的例子有好几个变量i,n,m。为什么呢?因为之前拿一个变量写的例子有人质疑过用return不是可以得到?

    确实一个变量的时候可以renturn出去,但是变量多了呢?

    又有人说直接在parent函数中写对变量的操作,可以不用这么麻烦。

    我把函数的调用放在前面是为了说明这个闭包可以在别的地方调用。

    有一种情况就是参数只能在parent函数里面拿到,而这参数不能立即调用,需要在某个特定场合调用,这个时候就不能在parent函数中直接写对变量的操作了,最好的方法就是闭包。

  • 相关阅读:
    Java数组
    Java非访问修饰符
    Java 循环结构
    Java修饰符
    Java语句
    DDK
    HDC中的前景色与背景色
    如何控制一个程序只能有一个进程
    把一个bmp转换成cur显示出来(掩码mask)
    怎么设置IE代理服务器
  • 原文地址:https://www.cnblogs.com/nurdun/p/6900957.html
Copyright © 2011-2022 走看看