Javascript闭包概念剖析
2016-11-02 12:05
197 查看
某种情况下,函数调用依然持有对其原始定义的作用域的引用,这个引用就叫做闭包。
函数bar的词法作用域能够访问到foo的内部作用域,然后我们将bar函数本身当作一个函数值类型进行传递。
foo()执行后,根据javascript引擎垃圾回收机制,由于看上去foo()内容不会再被使用,通常foo()整个内部作用域都会被销毁 。
而闭包的神奇之处正是可以阻止该事件发生,因为bar()依然再使用这个内部作用域,所以无法回收。
根据bar()所声明位置,它拥有涵盖foo()内部作用域的闭包,使得该作用域一直存活,以供之后任何时间引用。
bar()依然持有对该作用域的引用,而这个引用,就叫做闭包。
无论使用任何方式对函数类型的值进行传递,当函数在别处被调用时都可以观察到闭包。 无论通过任何手段将内部函数传递到所在词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包。
摘自大公爵ddamy.com
function foo(){ var a = 2; function bar(){ console.log(a); } return bar; } var baz = foo(); baz(); //2
函数bar的词法作用域能够访问到foo的内部作用域,然后我们将bar函数本身当作一个函数值类型进行传递。
foo()执行后,根据javascript引擎垃圾回收机制,由于看上去foo()内容不会再被使用,通常foo()整个内部作用域都会被销毁 。
而闭包的神奇之处正是可以阻止该事件发生,因为bar()依然再使用这个内部作用域,所以无法回收。
根据bar()所声明位置,它拥有涵盖foo()内部作用域的闭包,使得该作用域一直存活,以供之后任何时间引用。
bar()依然持有对该作用域的引用,而这个引用,就叫做闭包。
无论使用任何方式对函数类型的值进行传递,当函数在别处被调用时都可以观察到闭包。 无论通过任何手段将内部函数传递到所在词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包。
摘自大公爵ddamy.com
相关文章推荐
- 企业服务总线解决方案剖析 第 1 部分: 企业服务总线的基本概念
- 深入理解Javascript闭包概念
- storm基础系列之一----storm并发度概念剖析
- 转:深入理解JavaScript闭包概念
- readelf工具深入剖析(入门概念请参考其他文章)
- 高内聚,低耦合的概念剖析
- 《AngularJS深度剖析与最佳实践》笔记: 第二章 概念介绍
- JavaSE、JavaEE与Spring的概念和异同点剖析
- 深入剖析 OC 中的方法结构 (isa指针的指向,以及元类的概念等)
- 什么是JavaScript闭包终极全解之一——基础概念
- Docker的概念及剖析原理和特点
- 高内聚,低耦合的概念剖析
- JavaScript闭包基本概念
- uc/os-II 源码剖析笔记(1)——几个OS相关的基本概念(二)
- 对高等数学中的基本概念的剖析
- JavaScript闭包的概念及用法
- 第一章 数组与指针概念剖析
- 深入剖析JavaScript编程中的对象概念
- 第一章 数组与指针概念剖析
- c++左值与右值概念剖析