<html>
<head>
<title>闭包</title>
<meta charset = "utf-8">
</head>
<body>
</body>
<script type = "text/javascript">
//闭包:外部函数返回的,持有外部函数变量的, 内部函数。
function fun(){
var name = "tom";
return function(){
console.log(name);
};
}
//获取闭包函数
var bb = fun();
bb();
//闭包通常采用匿名自执行函数作为外部函数
//js中天生不存在常量的概念 常量: 程序中可以被访问使用但不允许修改的数据。
//使用闭包模拟常量
var bb2 = (function(){
var conf = {
author: "tom",
version: "1.02"
};
// return {
// getAuthor: function(){
// return conf.author;
// },
// getVersion: function(){
// return conf.version;
// }
// }
return function (perName){
return conf[perName];
}
})();
// //读取版本信息
// console.log(bb2.getVersion());
// //获取作者信息
// console.log(bb2.getAuthor());
console.log(bb2("author"));
//闭包主要的功能: 配合外部函数创建独立的命名空间
//js本身不存在块级作用域,但是可以说那个函数模拟,通常使用匿名自执行函数。独立命名空间最显著的好处是不会污染全局命名空间。
//使用闭包封装一个完整的对象操纵功能
var biB = function(){
var classInfo = {
name: "H51615",
num: 75,
teacher: "Meng"
};
//使用闭包对外提供完整的数据访问接口
return {
getInfo: function(perName){
return classInfo[perName];
},
addInfo: function(perName, perValue){
classInfo[perName] = perValue;
return classInfo;
},
modInfo: function(perName, newValues){
classInfo[perName] = newValues;
return classInfo;
},
delInfo: function(perName){
delete classInfo[perName];
return classInfo;
}
};
}();
</script>
</html>