//获取内部变量的值 f2为闭包
function f1() {
var n = 999;
function f2() {
return n;
}
return f2;
}
var result = f1();
alert(result());
//闭包用途 UI初始化
var datamodel = {
table: [],
tree: {}
};
(function(dm) {
for (var i = 0; i < dm.table.rows; i++) {
var row = dm.table.rows[i];
for (var j = 0; j < row.cells; j++) {
drawCell(i, j);
}
}
})(datamodel);
//创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量
//执行完后很快就会被释放,关键是这种机制不会污染全局对象
//闭包用途 缓存数据
var CachedSearchBox = (function() {
var cache = {};
return {
attachSearchBox: function(dsid) {
if (dsid in cache) { //如果结果在缓存中
alert("获取缓存中的值");
return cache[dsid];
}
alert("新建的值");
var fsb = new Array("one", "two", "11", "14", "13", "11", "13", "12"); //新建
cache[dsid] = fsb; //更新缓存
return fsb;
},
clearSearchBox: function(dsid) {
if (dsid in cache) {
delete cache[dsid];
}
}
};
})();
alert(CachedSearchBox.attachSearchBox("input1")); //新建的值
alert(CachedSearchBox.attachSearchBox("input1")); //获取缓存中的值
CachedSearchBox.clearSearchBox("input1"); //清除
alert(CachedSearchBox.attachSearchBox("input1")); //新建的值
alert(CachedSearchBox.attachSearchBox("input1")); //获取缓存中的值
[js] view plain copy
// 闭包用途 数据封装 对象
function Person() {
var names = "default";
return {
getName: function() {
return names;
},
setName: function(newname) {
names = newname;
}
}
};
//alert(names); 直接ames 未定义报错 n
var json = Person();
alert(json.getName()); //default
json.setName("json");
alert(json.getName()); //json