JavaScript模块化编程

JavaScript模块化编程

一、定义

​ 模块化是一种编程技术,将程序分解为独立的、可重用的模块。模块是一段代码,可以独立地被编写、测试、维护和升级。这种技术可以让程序更易于编写、理解和维护,同时还可以提高代码的复用性和可扩展性。模块化编程是现代软件开发中的一种重要思想,被广泛应用于各种编程语言和平台。(小助手定义)

二、演变

1. 全局函数

​ 所有的变量和函数都暴露在全局,无法保证全局变量不与其他模块的变量发生冲突。另外,全局函数形成的模块成员之间看不出直接关系。

<body>
	<script>
		//定义
		var name;
		function print(arg){console.log(arg)};
		function cleanName(){name='';console.log(name)};
		//操作
		name = '索菲亚';
		print(name);
		cleanName();
	</script>
</body>

2. 对象命名空间

​ 定义一个新的对象,例如:__def, 就会解决了nameprintcleanName 3个函数的命名冲突。但再定义一个名称为_def的命名空间还是会存在冲突,而且对象内部属性可以被外部随意改写。

<body>
	<script>
		//定义
		var _def = {}
		_def.name;
		_def.print = function(arg){console.log(arg)};
		_def.cleanName = function(){name='';console.log(name)};
		//使用
		_def.name = '索菲亚';
		_def.print(_def.name);
		_def.cleanName();
	</script>
</body>

3. 函数作用域(闭包)

​ 利用JavaScript函数作用域的特点,通过匿名自执行函数,进行私有变量隔离。添加返回值后,在全局可以通过“匿名函数.属性/匿名函数.方法()”的方式进行调用。这样有效地公开了公有方法,并且可以隐藏一些私有属性和元素,私有空间的函数和变量也不会影响全局作用域。

<body>
	<script>
		//定义
		var _def = (function(){
			var name;
			var print = function(arg){console.log(arg)};
			var cleanName = function(){name='';console.log(name)};
			return {name:name,print:print,cleanName:cleanName};
		})();
			
		//使用
		_def.name = '索菲亚';
		_def.print(_def.name);
		_def.cleanName();
	</script>
</body>

闭包定义中,返回值说明:

  • 在定义中不添加返回的属性,外部访问不到

    比如定义中不返回name属性,只返回print、cleanName函数,return {print:print,cleanName:cleanName};,使用_def.name会输出undefined

  • 返回的属性名可自定义

    比如定义的时候return {ns:name,ps:print,cs:cleanName};,其中ns/ps/cs为自定义属性,在使用的过程中只能通过自定义属性_def.ns访问,如直接使用_def.name会输出undefined

4. 扩展

​ 拓展_def函数,为其添加pro方法

<body>
	<script>
		//定义
		var _def = (function($){
			var name;
			var print = function(arg){console.log(arg)};
			var cleanName = function(){$.name='';console.log($.name)}; 
			$.name = name;
			$.print = print;
			$.cleanName = cleanName;
			return $;
		})( _def || {});
        
		//自定义扩展
		var _defpro = (function($){
			$.pro = function(){
				$.name += 'pro';
				console.log($.name);
			}
			return $;
		})(_def || {})
		
        //使用
		_def.name='索菲亚';
		_def.print(_defpro.name);//输出 索菲亚
		_def.pro();  //输出 索菲亚pro
	</script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值