【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:路漫漫其修远兮,吾将上下而求索。
【JS】垃圾回收和块级作用域的更多相关文章
- JavaScript的作用;JS常见的三种对话框;==和===的区别;函数内部参数数组arguments在函数内部打印实参;JS的误区:没有块级作用域
		
JS:客户端(浏览器)脚本语言 弱类型 基于原型 事件驱动 不需要编译(直接运行) JS的作用:表单验证,减轻服务端的压力 添加页面动画效果 动态更改页面内容 Ajax网络请求 (一)常见的对 ...
 - 你不知道的JS之作用域和闭包(三)函数 vs. 块级作用域
		
原文:你不知道的js系列 在第(二)节中提到的,标识符在作用域中声明,这些作用域就像是一个容器,一个嵌套一个,这个嵌套关系是在代码编写时定义的. 那么到底是什么产生了一个新的作用域,只有函数能做到 ...
 - 6个函数的output看JS的块级作用域
		
1. var output = 0; (function() { output++; }()); console.log(output); 函数对全局的output进行操作,因为JS没有块级作用域,所 ...
 - 可怜的js居然没有块级作用域
		
js中在一个函数中定义一个for循环:for(var i=0;i<5;i++) 其中的i并不会随着for循环的结束就销毁,i会一直存在该函数中,这就是js和其他语言的区别,也就是js没有块级作用 ...
 - 一个经典的js中关于块级作用域和声明提升的问题
		
function functions(flag) { if (flag) { function getValue() { return 'a'; } } else { function getValu ...
 - JS的块级作用域
		
今天带来的是 "对<你不知道的js>中块级作用域的总结" 分享: 1)用with从对象中创建出来的作用域只在with声明中而非外部作用域有效,同时可以访问已有对象的属性 ...
 - JS 模仿块级作用域
		
function outputNumbers(count) { for (var i=0; i<count; i++) { console.log(i); } var i; // 重新声明变量 ...
 - js中的块级作用域
		
概述 函数是js中最常见的作用域单元, 声明在一个函数内部的变量或函数会在所处的作用域中隐藏起来, 这是有意为之的非常好的设计原则. 但是随着js的发展, 我们有了某个代码块(通常指{..}内部)隐藏 ...
 - js私有作用域(function(){})(); 模仿块级作用域
		
摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html js没有块级作用域,简单的例子: f ...
 
随机推荐
- 【POJ 1456】 Supermarket
			
[题目链接] http://poj.org/problem?id=1456 [算法] 贪心 + 堆 [代码] #include <algorithm> #include <bitse ...
 - bzoj 1800 & 洛谷 P2165 [AHOI2009]飞行棋 —— 模拟
			
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1800 https://www.luogu.org/problemnew/show/P21 ...
 - Apache上php项目简单部署
			
1.建一个简单的php项目 1)在目录C:\wamp\www中新建一个文件夹,命名为20151021 2)在文件夹20151021中新建一个index.php文件,内容为: <?php echo ...
 - Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP
			
题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长 ...
 - HDU2186
			
2019-05-30 19:31:10 水题 #include <bits/stdc++.h> using namespace std; int main() { int c; scanf ...
 - IO流遍历文件夹下所有文件问题
			
import java.io.File; /** * @author 王恒 * @datetime 2017年4月20日 下午2:24:32 * @description 递归调用 * */ publ ...
 - Lua Time
			
-- local getTime = os.date(“%c”); -- %a abbreviated weekday name (e.g., Wed)-- %A full weekday name ...
 - Android Studio 将module打成jar包
			
1.新建测试工程,工程里面有两个module,app是Android工程,mylibrary是Android Library库. 2.打开mylibrary目录下的build.gradle文件,加入下 ...
 - .Net并行计算支持嵌套事务的方法
			
问题背景 一年前,我们开始利用.Net 4.0的TPL(Task Parallel Library)并行计算技术对复杂计算的功能节点进行性能优化,这些复杂计算往往会包含大量对数据库的操作.在应用TPL ...
 - 虚拟机+linux+大杂烩
			
出于项目需要,需要用到linux系统.这玩意儿平时很少用,要说体验度还是windows更人性化一些. 1.虚拟机的安装,这个没说的,百度VMware直接下最新版安装就好. 2.接着是linux系统的安 ...