班门弄斧02:Javascript闭包,实践篇
if (queryObj != null) {
for ( var key in queryObj) {
for ( var i = 0; i < this.datas.length; i++) {
if (this.datas[i][key] == queryObj[key]) {
this.datas[i]._state = 'E';
}
}
}
}
};
var movie_query = function () {
var rtnArray = new Array();
var j = 0;
for(var i = 0; i < this.datas.length; i++) {
if(this.datas[i]._state == 'U') {
rtnArray[j++] = this.datas[i];
}
}
return rtnArray;
};
movie.addMovie = movie_add;
movie.deleteMovie = movie_delete;//delete为关键字
movie.queryMovie = movie_query;
movie.datas = _datas;
return movie;
}
})();
var ZMovie = _ZMovie();
ZMovie.addMovie(1, '蝙蝠侠前传1:侠影之谜', '2014-01-05', 1000000);
ZMovie.addMovie(2, '蝙蝠侠前传2:黑暗骑士', '2014-01-05', 1000000);
ZMovie.addMovie(3, '蝙蝠侠前传3:黑暗骑士崛起', '2014-01-05', 1000000);
var datas = ZMovie.queryMovie();
for ( var i = 0; i < datas.length; i++) {
alert(datas[i].id + "|" + datas[i].name + "|" + datas[i].date + "|"
+ datas[i].office + "|" + datas[i]._state);
}
ZMovie.deleteMovie("{'id':1}");
var datas = ZMovie.queryMovie();
for ( var i = 0; i < datas.length; i++) {
alert(datas[i].id + "|" + datas[i].name + "|" + datas[i].date + "|"
+ datas[i].office + "|" + datas[i]._state);
}
</script>
javascript的闭包总结:
概念(专业):闭包是 函数的局部变量集合,并且集合中的元素滞留在堆栈中,在函数返回后不会释放
概念(通俗):
第一层理解:就是将内部变量呈现到全局的方法
第二层理解:结合java对象进行讲解,比如某个业务层对外提供的方法可能只有几个,也就是我们所关心的,但是我们并不关注这些业务逻辑使用到了那些属性以及时如何实现的,便于我们更好的协同运作,那么我们怎么在js中实现呢,就是一个又一个对外提供的js文件,这个时候我们可以使用闭包实现,比如我们例子中的Movie对象,我们可能就是新增,删除,查询等操作,我们可能也就是关心这些方法,但是对于他的属性(可能我们还需要一些特定的属性,比如逻辑状态)我们是不关心的,所以闭包就是封装住了内部属性,对外提供一些可用方法进行操作!
?