码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript闭包概念剖析

时间:2016-11-02 14:13:59      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:闭包概念   情况   cti   class   return   code   ret   内容   方式   

某种情况下,函数调用依然持有对其原始定义的作用域的引用,这个引用就叫做闭包。

1 function foo(){
2         var a = 2;
3         function bar(){
4             console.log(a);
5         }
6         return bar;
7 } 
8 var baz = foo();
9 baz(); //2

 

  • 函数bar的词法作用域能够访问到foo的内部作用域,然后我们将bar函数本身当作一个函数值类型进行传递。
  • foo()执行后,根据javascript引擎垃圾回收机制,由于看上去foo()内容不会再被使用,通常foo()整个内部作用域都会被销毁 。
  • 而闭包的神奇之处正是可以阻止该事件发生,因为bar()依然再使用这个内部作用域,所以无法回收。
  • 根据bar()所声明位置,它拥有涵盖foo()内部作用域的闭包,使得该作用域一直存活,以供之后任何时间引用。
  • bar()依然持有对该作用域的引用,而这个引用,就叫做闭包。

无论使用任何方式对函数类型的值进行传递,当函数在别处被调用时都可以观察到闭包。 无论通过任何手段将内部函数传递到所在词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包。 

摘自大公爵ddamy.com

Javascript闭包概念剖析

标签:闭包概念   情况   cti   class   return   code   ret   内容   方式   

原文地址:http://www.cnblogs.com/webhb/p/6022468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!