闭包

151 阅读1分钟
<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>