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 ...
随机推荐
- C# 检测网络链接
;//Local system uses a modem to connect to the Internet. ; //Local system uses a local area network ...
- 水水更健康~~~~~~~~~~~~~~~AutoRun免疫的原理
免疫AutoRun病毒的原理建立在一个无法删除的AutoRun.inf文件夹,以防止病毒生成用来运行的AutoRun.inf文件 打开命令提示符 输入: 1.cd \2.mkdir autorun.i ...
- Android webview 取得javascript返回值
package com.she.jyass.UI; import android.content.Context; import android.webkit.WebView; public clas ...
- iOS不显示状态栏(电池和信号栏)
//隐藏状态栏 - (BOOL)prefersStatusBarHidden { return YES; } 在viewcontroller里面加入
- 介绍几个java把网页报存为图片的框架
java在图像这一块非常弱.用java实现java截图倒不难,原理吗就是把当前屏幕存成一个图,然后获取鼠标拉去的想去位置然后把截取的图保存到panel里边,再生成图片即可:示例代码就不展示了,网上很多 ...
- 离线安装chrome插件
1. 先百度下载自己要安装的chrome插件,比如:Postman 和 Json View. 2.下载完应该得到的是扩展名为crx的文件. 比如: Postman-REST-Client_v0.8.4 ...
- java基础之hashmap
Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论. 1.hashma ...
- C# WebRequestExtensions
https://gist.github.com/abombss/2720757 public static class WebRequestExtensions { public static Htt ...
- LIST 和 MAP
Collection和Map LIST 集合 arraylist arraylist源代码: 1.ArrayList 底层采用数组实现,当使用不带参数的构造方法生成 ArrayList 对象时,实际上 ...
- js回调函数
自学jQuery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函数了.不懂啊,于是在google回调函数,发现网上的中文解释实在是 ...