韩顺平 javascript教学视频_学习笔记20_多态经典案例_补讲闭包细节
来源:互联网 发布:js点击弹出qq聊天窗口 编辑:程序博客网 时间:2024/04/30 21:15
- 多态经典案例
经典案例,看代码:
<html> <head> <script language="javascript"> function Master(){//给动物喂食this.feed=function(animal,food){window.alert(animal.constructor);document.write("主人给 "+animal.name+" 喂食 "+food.name+"<br/>");}}//写食物function Food(name){this.name=name;//...}function Fish(name){this.food=Food;this.food(name);}function Bone(name){this.food=Food;this.food(name);}function Taozi(name){this.food=Food;this.food(name);}//动物function Animal(name){this.name=name;}function Cat(name){this.animal=Animal;//对象冒充this.animal(name);}function Dog(name){this.animal=Animal;//对象冒充this.animal(name);}function Monkey(name){this.animal=Animal;//对象冒充this.animal(name);}var cat=new Cat("小猫咪");var dog=new Dog("小狗");var fish=new Fish("小鱼");var bone=new Bone("骨头");var master=new Master();master.feed(cat,fish);master.feed(dog,bone);master.feed(new Monkey("小猴"),new Taozi("桃子")); </script> </head> <body></body> </html>
- 闭包 ----什么是闭包
闭包(closure)
javascript闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数的执行完成而销毁。
<html> <head> <script language="javascript"> //闭包 closurefunction a(){ var i=0; function b(){ alert(++i); } return b; } //闭包和GC有关系a();//此时,内存中会给i分配一个空间,当运行完a()后,GC就把i的空间当作了垃圾var c=a(); //当把 a() 赋给c后 ,GC没有把 i 的空间当作垃圾,因为他认为后面可能c还会用到i这个值,就不会把i的空间当作垃圾c(); // 返回 1c(); //返回 2,更能说明 i 的空间没有被当作垃圾来回收 </script> </head> <body></body> </html>
这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示 i 的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内部的函数b
就是说:
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的闭包。
闭包的作用:就是在a执行完并返回后,闭包使得javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。
进一步对闭包解释:
- 闭包和gc是相关联的
- 闭包实际上是涉及到一个对象的属性,何时被gc处理的问题
- 怎样才能对对象的属性形成一个闭包(看上面的案例)
0 0
- 韩顺平 javascript教学视频_学习笔记20_多态经典案例_补讲闭包细节
- 韩顺平 javascript教学视频_学习笔记10_js一维数组_一维数组细节
- 韩顺平 javascript教学视频_学习笔记15__构造函数_成员函数详解
- 韩顺平 javascript教学视频_学习笔记30_小球撞球游戏
- 韩顺平 javascript教学视频_学习笔记32_仿sohu频道切换效果
- 韩顺平 javascript教学视频_学习笔记13_类和对象细节_创建对象的几种方式_js对象内存分析
- 韩顺平 javascript教学视频_学习笔记31_随意拖拽窗口案例_dom对象(style对象)_坦克大战1.0版
- 韩顺平 javascript教学视频_学习笔记9_js函数调用过程内存分析_js函数细节
- 韩顺平 javascript教学视频_学习笔记1_js课程介绍_js基本介绍
- 韩顺平 javascript教学视频_学习笔记3_js基本数据类型_js运算符
- 韩顺平 javascript教学视频_学习笔记4_js运算符2_js移位运算
- 韩顺平 javascript教学视频_学习笔记7_js自定义函数
- 韩顺平 javascript教学视频_学习笔记8_js系统函数_js函数调用方式
- 韩顺平 javascript教学视频_学习笔记14_this关键字详解
- 韩顺平 javascript教学视频_学习笔记17_js超级玛丽小游戏
- 韩顺平 javascript教学视频_学习笔记26_dom对象(window对象2)
- 韩顺平 javascript教学视频_学习笔记28_dom对象(document对象) 最重要的
- 韩顺平 javascript教学视频_学习笔记33_js正则表达式开山篇
- phpdoc 使用(一)
- 进击的KFC:IOS开发之格式化日期时间
- springmvc 中使用poi导出excel
- HDU-2159 FATE(二维费用背包问题)
- 文章标题
- 韩顺平 javascript教学视频_学习笔记20_多态经典案例_补讲闭包细节
- 蛇形填数
- Sql语句优化--经典收藏
- java提高篇(二二)-----LinkedList
- heredoc和nowdoc的区别
- Calendar日期加一天
- 是时候该写点东西了
- PL/SQL开发
- OpenGL学习笔记(第二天)(范例+练习)