JavaScript闭包与房子
来源:互联网 发布:hadoop 8485端口 编辑:程序博客网 时间:2024/04/29 23:52
1、何谓闭包
JavaScript例子:
function GISMapPanel() {
this.mapPanel = document.getElementById("mapDiv");
this.width;
this.height;
this.showMap = function() {
alert(this.mapPanel); //tip:[object]
this.mapPanel.onmousedown = this.mouseDownEventProcess();
}
this.mouseDownEventProcess = function( ){
var _this = this;
return function() {
alert(this.mapPanel); //tip:undefined,why;
_this.width = 400;
_this.height = 300;
//other codes
}
}
}
闭包简单的解释是,ECMAScript允许inner functions(嵌套函数):函数可以定义在另外一个函数里面。这些内部的函数可以访问outer function(父函数)的local变量,参数,其它内部函数。当内部函数被构造,并可以在函数外被获得(函数当成返回值),这个内部函数在 outer function返回后被执行(在outer函数外执行),那一个闭包形成了。
闭包特征:A、作为一个函数变量的一个引用,当函数返回时,其处于激活状态;B、一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
2、 闭包隐喻
function就像房子内的居室(也是房子),可以租给给甲居住,甲就是居室(function)的主人(this),也可以租给乙住,乙就成为居室(function)的主人(this),甲原来的一切则被甲带走,乙用不到任何甲的东西。如果甲是房子(外层function)的主人,并把某居室(内层function)租给乙,乙具有居室内的一切,而乙也可以使用甲的卫生间、客厅(外层函数变量,如_this)。闭包变量就是外层房子内变量,包括居室(function)、卫生间、客厅(外层函数变量)。同JavaScript闭包,居室可以是一局、两局、多局,当然一局一般比较好租,JavaScript闭包一般也是一局。
3、闭包作用
面向对象编程的成功和流行,使不支持面向的对象编程的语言也尽量往这个方向靠,如C语言可以通过struct及function指针,模拟面向对象编程,以期达到面向对象的封装、多态;JavaScript则通过基于对象编制以期达到封装性。如上例所示,把地图(div)相关的事件处理代码、相关属性、相关方法集中到GISMapPanel对象中。但由于事件发生的实体是地图对应的div对象,事件函数调用时房子是由div对象居住的,也就是说this是div元素,因此,会出现alert(this.mapPanel); //tip:undefined,div元素没有属性mapPanel;如果想要访问原GISMapPanel对象中的属性,就要象例子所示,把GISMapPanel对象当作一个客厅来处理,从而可以使用客厅内的东西,而不是别人居室内的东西(也是访问不到的,正如alert(this.mapPanel); //tip:undefined,该this就不是外层居室的this了,本来想直接访问外层居室的this)。通过闭包、基于对象,取代了全局变量、函数方式的JavaScript处理事件、业务逻辑处理手段,增加了模块性、封装性、问题局部化等特性。
- JavaScript闭包与房子
- JavaScript函数与闭包
- javascript递归与闭包
- JavaScript 原型与闭包
- javascript闭包与变量
- javascript循环与闭包
- 程序与房子
- 深圳---房子与股票
- 编程与造房子
- 火星人与房子问题
- 后代与房子
- javascript函数作用域与闭包
- Javascript 匿名函数与闭包
- javascript的闭包与scope
- javascript的匿名函数与闭包
- [JavaScript]-----匿名函数与闭包
- Javascript 闭包与作用域
- Javascript闭包与作用域
- jfreechart 的 api
- 简单小问题,数据窗口相邻行颜色不同
- 【vc】【多媒体编程应用】MCI编程之 mciSendCommand
- 如何快速提升Firefox的性能
- 中国最好的博客网站
- JavaScript闭包与房子
- PB中如何使用PDF阅读控件?
- asp.net2.0中的menu链接到本地的可执行文件,有的行有的不行,请教高手
- 人要有追求
- 如何利用左右键及回车键来转移列的焦点
- 建立批处理文件
- 获取上月第一天
- 各个接口的选择
- 完成了一个潮流计算程序