日期:2014-05-16  浏览次数:20433 次

班门弄斧02:Javascript闭包,实践篇

闭包是 函数的局部变量集合,并且集合中的元素滞留在堆栈中,在函数返回后不会释放

在javascript中function 也是变量,记住这两点,闭包就理解了(感谢wusir的大力指导~)


假设我们现在要做一个关于电影操作的闭包练习,分析如下:
(1) 属性:电影名称,上映时间,票房
(2)动作:新增,删除,修改,查询电影

第一步:搭建闭包的架子

<script type="text/javascript">

var Movie = (
function() {
return function () {

}
}
)();

</script>

第二步:
(1)假设我们的代码封装在js中,让别人调用
(2)_ZMovie闭包函数承载的对象,其实是个函数
(3)真正让用户直接使用的是执行_ZMovie()函数后的对象,ZMovie

<script type="text/javascript">

var _ZMovie = (
function() {//1.定义的匿名函数体,就是外围函数
var movie = new Object();//2.外围函数中的变量,外部是无法访问的
return function () {//3.返回的是一个内部函数体,一旦执行了这个内部函数体,我们返回的就是一个对象,这边有点难以理解
var _datas = new Array();
var movie_add = function (_name,_date,_office) {
movie.name = _name;
movie.date = _date;
movie.office = _office;

_datas[0] = movie;
}
movie.add = movie_add;
movie.datas = _datas;

return movie;
}
}
)();

var ZMovie = _ZMovie();
ZMovie.add('神探夏洛克','2014-01-05',1000000);
var datas = ZMovie.datas;
for(var i = 0; i < datas.length; i++) {
alert(datas[i].name);
alert(datas[i].date);
alert(datas[i].office);
}

</script>

写这个例子的时候,自己也是瞎拼凑出来的,存在的BUG和其他方法未写,大体的架子搭好,待续!
2014.01.05 01:51





<script type="text/javascript">
var _ZMovie = (function() {//1.定义的匿名函数体,就是外围函数
var movie = new Object();//2.外围函数中的变量,外部是无法访问的