美文网首页
Javascript-函数闭包

Javascript-函数闭包

作者: 一座被占用 | 来源:发表于2017-04-18 11:46 被阅读0次

javascript函数闭包一直是本人没搞懂,概念模糊的盲点。在项目中也遇到过,只是当真正的代码放我面前的时候我还是搞错。

所以就查阅资料后,对它的基本用途和概念有了一个模糊的印象。要说搞懂了那还差一大截。别信那些 “一句话搞懂js闭包” 的鬼话。言归正传

1.Javascript的变量作用域:全局变量和局部变量。全局变量会带来全局变量”污染“,但是局部变量又导致了函数外部无法读取函数内的局部变量。所以就有了闭包的概念

2.闭包特性:

2.1:函数嵌套这函数

2.2:函数内部可以引用外部的参数和变量

2.3:参数和变量不会被垃圾回收机制回收

闭包实例 闭包运行结果

上面这个闭包实例很基础简单的了。仔细看也很好理解。

另外一个闭包实例

var result = f1() ---->result = f2

result() -----> f2() 这个时候n是999

nAdd()  ------>f1里面的n(999)加上1;

result() ------>f2() 这个时候n是1000了

有人会很疑惑:var n = 999;是在f1里面的局部变量,当被执行一次后,为什么没有被释放内存?这个也是闭包的一个特点:这个变量n的值始终保持在内存中!!!为啥呢?

原因在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存当中,不会再调用结束后被GC(garbage collection)回收.

上面就是我“理解"的函数闭包,希望在实践中得到验证和加强对闭包的理解!

最后贴出参考地址和里面的两道思考题:

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

思考题1:

     var name = "The Window";

     var object = {

               name : "My Object",

               getNameFunc : function(){

                     return function(){

                          return this.name;

                     };

              }

      };

console.info(object.getNameFunc()());

思考题2:

     var name = "The Window";

     var object = {

          name : "My Object",

          getNameFunc : function(){

               var that = this;

                    return function(){

                            return that.name;

                    };

            }

      };

console.info(object.getNameFunc()());

什么?我还像听到你在问我:这题你会吗?我不会呀!求指导!!!!

相关文章

  • Javascript-函数闭包

    javascript函数闭包一直是本人没搞懂,概念模糊的盲点。在项目中也遇到过,只是当真正的代码放我面前的时候我还...

  • 如何理解闭包?

    1、定义: 嵌套在函数作用域中的函数,称为闭包函数。该作用域称为闭包环境。通过闭包函数可以访问闭包函数所在函数作用...

  • JavaScript-闭包

    闭包(Closure)概念 在A函数中定义了一个B函数,在B函数中使用了A函数中的变量,就会产生闭包,其中B就是一...

  • 关于逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包非逃逸闭包当函数执行过程中,执行的函数内部的闭包,...

  • 3.逃逸闭包,非逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包非逃逸闭包:当函数执行过程中,执行的函数内部的闭包...

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • day14-函数(3)装饰器

    一、闭包函数 闭包函数=函数嵌套定义+函数对象+名称空间与作用域 闭包函数 1、闭:指的是该函数是定义在一个函数内...

  • 面试题(day-2)

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,...

  • JS的闭包

    1.闭包的概念 闭包函数:声明在一个函数中的函数,叫做闭包函数。闭包:内部函数总是可以访问其所在的外部函数中声明的...

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

网友评论

      本文标题:Javascript-函数闭包

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