【JS】垃圾回收和块级作用域

垃圾回收:

JavaScript中,开发人员不必关心内存分配和回收的问题,这和Java语言相似,有一个垃圾自动回收机制。那么JavaScript内部究竟是怎样回收垃圾的呢?

使用标记回收法:就是说,离开作用域的值将被自动标记为可以回收,因此将在垃圾收集期间被删除。

标记删除是当前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然后回收期内存。

关于作用域的知识,大家有需要可以再搜集一下资料学习,这里就不详细叙述了。

打个比方:

function test(){
			var color='red';
			alert(color);
		}
		test();
当test()执行完毕,color也离开了作用域,此时会被自动添加一个“可以回收”的标记,当有“垃圾车”经过的时候(会有一个固定的时间来“巡视”,比如每隔2秒“巡视”一次),看到有这个标记就会自动回收,开发人员就可以爽歪歪不用再对内存分配和回收担忧那么多啦~


块级作用域:

JavaScript里没有块级作用域的概念,这和C、Java等高级语言不同,所以在使用if、for时要格外小心。

function test(){
			for(var i=1;i<=5;i++){
				alert(i);	//依次弹出数字1-5
			}
			alert(i);		//6
		}
		test();

正因为js没有块级作用域的概念,所以在for循环后面的alert仍然能弹出6,而不是undefined或者报错(正常情况下,i的作用域只在for循环里,离开for循环再使用i就相当于未声明变量,会提示undefined或报错)。

那么在js中如何模拟Java等语言,使得拥有块级作用域呢?增加括号()

function test(){
			(function (){	//添加一个匿名函数,并使用括号括起来
				for(var i=1;i<=5;i++){
					alert(i);	//依次弹出数字1-5
				}
			})();		//这一行最末尾的括号()是为了让函数自动执行
			alert(i);	//undefined
		}
		test();
通过添加括号,就能使得其拥有块级作用域了,此时for循环后的alert会提示undefined。

这种方法是使用()括起函数,作为一个域,再在外面结尾处添加()表示自动执行,而不需要一些触发或者其他事件驱动才执行的函数,大量用于jQuery等底层框架的源码。

(function test(){
			alert('我直接就执行了');
		})();
		//注意,这里不需要像传统的方法那样,需要click或者test()才会触发上面test函数的执行,而是自动就执行了


Author:致知

Sign:路漫漫其修远兮,吾将上下而求索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值