6

闭包

闭包的三大特点为:

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();

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 3,487评论 1 24
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,906评论 0 38
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,736评论 1 45
  • YOYO成长记阅读 310评论 0 3
  • 往事如梦,带着浅淡袭人的清香,勾人心魂 我愿沉浸其中,忘却世间嘈杂 白昼与黑夜轮替换,时间之轮无法阻挡 过往如烟云...
    loooking阅读 359评论 0 0