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 ...
随机推荐
- MySQL主从数据库同步
更新中,还未测试.......
- GFS: Evolution on Fast-forward
GFS: Evolution on Fast-forward by Marshall Kirk McKusick, Sean Quinlan | August 7, 2009 A discussion ...
- 一模 (1) day1
第一题:(水题) 题目大意:求出n个 X% (X是小于等于2位的整数) 的乘积,去掉末尾的0: 解题过程: 1.直接 把整数乘好,然后确定小数点的位置,去掉多余的0 输出即可. 第二题:(搜索题) ...
- lucene 过滤结果
package cn.itcast.h_filter; import java.util.ArrayList; import java.util.List; import org.apache.luc ...
- outlook新邮件到达提醒设置以及outlook最小化到托盘设置
有些邮件是需要马上处理的,因此希望能在收到邮件之后马上就知道,但是有不希望频繁的去检查有没有.outlook可以帮我们轻松做到新邮件到达提醒. 一 .设置outlook新邮件到达提醒:选项->电 ...
- ie浏览器兼容性快速处理小招
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [安卓]The Google Android Stack
- mysql 导入数据库文件到指定数据库
i:\mysql\bin>mysql -u 用户名 -p 数据库名 < i:/test.sql // (source "c:\adsense.sql" ) ...
- VMWare三种工作模式 :bridge、host-only、nat
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...
- 0125 多线程 继承Thread 练习
//定义一个继承Thread类的类,并覆盖run()方法,在run()方法中每隔100毫秒打印一句话public class Csh extends Thread{ public void run() ...