JS基础知识(作用域/垃圾管理)
1.js没有块级作用域
if (true) {
var color = “blue”;
}
alert(color); //”blue”
for (var i=0; i < 10; i++){
doSomething(i);
}
alert(i); //
2,变量定义 全局变量
变量定义:var和没有var
function add(num1, num2) {
var sum = num1 + num2;
return sum;
}
var result = add(10, 20); //
alert(sum); //causes an error since sum is not a valid variable
function add(num1, num2) {
sum = num1 + num2;
return sum;
}
var result = add(10, 20); //
alert(sum); //
var scope = "global";
function f() {
alert(scope); //显示undefined
var scope = "local";
alert(scope);
}
f();
3,垃圾回收
垃圾回收机制最困难的工作在于找出什么时候“不再需要某个已分配的内存了”。这常常需要开发者去决定在程序的什么位置不再需要某个内存然后释放它。
var o = {
a: {
b:2
}
}; //2个对象被创建。其中一个作为另一个的属性而被引用。
//后者通过赋值给变量‘o’而被引用。
//很明显,它们都不能被垃圾收集。
var o2 = o; //变量‘o2’是第二个引用这个对象的
o = 1; //现在,起始于'o'的对象通过变量'o2'产生了一个独立的引用
var oa = o2.a;
//这个对象现在有2个引用:一个作为属性,另一个作为变量'oa'。
o2 = "yo"; //现在,没有任何引用指向起始于'o'的对象
//然而,最初作为属性'a'的对象仍然被变量'oa'引用着,因此它不能被释放
oa = null; //当'oa'重新赋值后,最初属性'a'指向的对象不再被引用
function () {
var objectA = new Object();
var objectB = new Object();
objectA.someOtherObject = objectB;
objectB.anotherObject = objectA;
}
这个算法将定义”一个对象不再被需要“缩小为”一个对象不能被到达“。
这个算法假设一组称为roots的对象(在Javascript中,root是全局对象)。垃圾收集器会定期地从roots开始查找所有被roots引用的对象,然后是所有被这些对象引用的对象,以此类推。由于是从roots开始,因此垃圾收集器将找到所有可以到达的对象,并收集所有不可到达的对象。
这个算法优于前一个,因为当”一个对象没有任何引用指向它“时必然使得这个对象不能被到达。但是相反则不成立,正如我们从循环引用中看到的那样。
截 止到2012,所有的现代浏览器都使用了标记-扫描式的垃圾收集器。在过去几年中,Javascript垃圾回收领域的所有改进(世代/增量/并发/并行 的垃圾收集)都是对这一算法的改进实现,而不是对垃圾回收算法本身的改进,也不是对它的定义”当一个对象不再被需要“的缩减。
-------------------------
最后是不是要说作为开发者 如今基本不用关心垃圾回收问题呢?
JS基础知识(作用域/垃圾管理)的更多相关文章
- [JS复习] JS 基础知识
项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display :inline or bloc ...
- HTML+CSS+JS基础知识
HTML+CSS+JS基础知识 目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="sty ...
- Node.js基础知识
Node.js入门 Node.js Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...
- 网站开发进阶(十五)JS基础知识充电站
JS基础知识充电站 1.javascript alert弹出对话框时确定和取消两个按钮返回值? 用的不是alert对话框,是confirm confirm(str); 参数str:你要说的话或问题: ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- JS基础学习——作用域
JS基础学习--作用域 什么是作用域 变量的作用域就是变量能被访问到的代码范围,比如在下面的这个js代码中,变量a的作用域就是函数foo,因此在全局作用域内的console.log(a)语句不能访问到 ...
- JS基础知识笔记
2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...
- MySQL基础知识:启动管理和账号管理
整理.记录常用的MySQL基础知识:时间久了,很多就忘记了. 操作系统环境为MacOS Catalina, MySQL版本为: 8.0.13 MySQL Community Server - GPL. ...
- 第十八篇 js高级知识---作用域链
一直有想法去写写js方面的东西,我个人是最喜欢js这门语言,喜欢的他的自由和强大,虽然作为脚本语言有很多限制的地方,但也不失为一个好的语言,尤其是在H5出现之后.下面开始说说js的方面的东西,由于自己 ...
- Js基础知识6-JavaScript匿名函数和闭包
匿名函数 1,把匿名函数赋值给变量 var test = function() { return 'guoyu'; }; alert(test);//test是个函数 alert(test()); 2 ...
随机推荐
- JS中把字符串转成JSON对象的方法
在JS中,把 json 格式的字符串转成JSON对象,关键代码 json = eval('('+str+')'); <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- event.srcElement在火狐(FireFox)下的兼容问题。搜索框获得焦点时默认文字变化
前言: 项目中用到了一个功能,搜索框里有默认的文字,当搜索框获得焦点时里面的默认文字消失,如果失去焦点时搜索框内容为空则让里面的内容回复默认!,. 实现: 很轻松的在网上找到了类似代码 $(" ...
- Time, Clocks, and the Ordering of Events in a Distributed System
作者:Leslie Lamport(非常厉害的老头了) 在使用消息进行通信的分布式系统中,使用物理时钟对不同process进行时间同步与事件排序是非常困难的.一是因为不同process的时钟有差异,另 ...
- [Js]弹性运动
描述:像弹簧一样左右弹动,最后缓慢停下来 一.加减速运动 1.加速运动 var iSpeed=0;iSpeed++; 速度越来越快,最后冲出去 2.减速运动 var iSpeed=20;iSpeed- ...
- 完美实现自己的GetProcAddress函数(转载)
我们知道kernel32.dll里有一个GetProcAddress函数,可以找到模块中的函数地址,函数原型是这样的: WINBASEAPI FARPROC WINAPI GetProcAddress ...
- Unity3d之MonoBehaviour的可重写函数整理
最近在学习Unity3d的知识.虽然有很多资料都有记录了,可是我为了以后自己复习的时候方便就记录下来吧!下面的这些函数在Unity3d程序开发中具有很重要的作用. Update 当MonoBehavi ...
- 去除Sql Server中回车换行符
这里使用了,sql 函数.replace(string_expression , string_pattern , string_replacement), 第一个参数:要查找的字段. 第二个参数:要 ...
- 支持.NET和移动设备的XLS读写控件XLSReadWriteII下载地址及介绍
原文来自龙博方案网http://www.fanganwang.com/product/3085转载请注明出处 读写任何单元值 数字型.字符型.布尔型以及错误型.但是你了解日期和时间型单元吗?在Exce ...
- T420修改wifi灯闪动模式
给T420新装了centos7发现默认的配置wifi灯是工作时闪动的,有点晃眼,想改成简单的on 的时候常亮,off的时候常暗的模式 添加配置文件: vi /etc/modprobe.d/wlanle ...
- hadoop的RPC通信
RPC(remote procedure call)远程调用 不同的Java进程间的对象方法调用 一方称作服务端(server),一方称作客户端(client) server端提供对象,供客户端调用, ...