闭包

作者: 俺家宠宝 | 来源:发表于2018-08-04 20:46 被阅读0次

    **闭包**

    ```

    闭包的三大特点为:

    1、函数嵌套函数

    2、内部函数可以访问外部函数的变量

    3、参数和变量不会被回收。

    列:

    function test(){

        var a=1;

        return function(){

          alert(a);

        }

      }

      var try=test();

      try();//弹出a的值

    这个例子中,变量a在test方法外部是无法访问的,但test方法里面,嵌套了一个匿名函数,通过return返回,test作用域中的变量a,

    可以在匿名函数中访问。并且当test方法执行后,变量a所占内存并不会释放,以达到嵌套的函数还可以访问的目的。

    ```

    闭包作用

    ```

    闭包的作用在于,可以通过闭包,设计私有变量及方法。

    举例来说:在java中创建perosn类,含有私有变量name。

    public class Person{

        private String name='wy';

        public Person(val){

          name=val;

        }

        public void setName(val){

          name=val;

        }

        public String getName(){

          return name;

        }

    }

    ```

    全局

    ```

    最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的

    列:

    var outerVar = "outer";

          function fn(){

            console.log(outerVar);

          }

          fn();//result:outer

    ```

    局部

    ```

    和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的,最常见的例如函数内部

    列:

    function fn(){

            var innerVar = "inner";

          }

          fn();

          console.log(innerVar);// ReferenceError: innerVar is not defined

    ```

    **作用域链**

    ```

    在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。

    列:

    当一个函数创建后,它实际上保存一个作用域链,并且作用域链会被创建此函数的作用域中可访问的数据对象填充。例如定义下面这样一个函数

    function func() {

                var num = 1;

                alert(num);

            }

            func();

    ```

    相关文章

      网友评论

          本文标题:闭包

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