闭包

2018-08-04  本文已影响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();

```

上一篇下一篇

猜你喜欢

热点阅读