垃圾回收:

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】垃圾回收和块级作用域的更多相关文章

  1. JavaScript的作用;JS常见的三种对话框;==和===的区别;函数内部参数数组arguments在函数内部打印实参;JS的误区:没有块级作用域

    JS:客户端(浏览器)脚本语言 弱类型 基于原型 事件驱动 不需要编译(直接运行)   JS的作用:表单验证,减轻服务端的压力 添加页面动画效果  动态更改页面内容  Ajax网络请求 (一)常见的对 ...

  2. 你不知道的JS之作用域和闭包(三)函数 vs. 块级作用域

      原文:你不知道的js系列 在第(二)节中提到的,标识符在作用域中声明,这些作用域就像是一个容器,一个嵌套一个,这个嵌套关系是在代码编写时定义的. 那么到底是什么产生了一个新的作用域,只有函数能做到 ...

  3. 6个函数的output看JS的块级作用域

    1. var output = 0; (function() { output++; }()); console.log(output); 函数对全局的output进行操作,因为JS没有块级作用域,所 ...

  4. 可怜的js居然没有块级作用域

    js中在一个函数中定义一个for循环:for(var i=0;i<5;i++) 其中的i并不会随着for循环的结束就销毁,i会一直存在该函数中,这就是js和其他语言的区别,也就是js没有块级作用 ...

  5. 一个经典的js中关于块级作用域和声明提升的问题

    function functions(flag) { if (flag) { function getValue() { return 'a'; } } else { function getValu ...

  6. JS的块级作用域

    今天带来的是 "对<你不知道的js>中块级作用域的总结" 分享: 1)用with从对象中创建出来的作用域只在with声明中而非外部作用域有效,同时可以访问已有对象的属性 ...

  7. JS 模仿块级作用域

    function outputNumbers(count) { for (var i=0; i<count; i++) { console.log(i); } var i;  // 重新声明变量 ...

  8. js中的块级作用域

    概述 函数是js中最常见的作用域单元, 声明在一个函数内部的变量或函数会在所处的作用域中隐藏起来, 这是有意为之的非常好的设计原则. 但是随着js的发展, 我们有了某个代码块(通常指{..}内部)隐藏 ...

  9. js私有作用域(function(){})(); 模仿块级作用域

    摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html js没有块级作用域,简单的例子: f ...

随机推荐

  1. Kubernetes+Jenkins+Nexus+Gitlab进行CI/CD集成

    前面已经完成了 二进制部署Kubernetes集群,下面进行CI/CD集成. 一.流程说明 应用构建和发布流程说明: 1.用户向Gitlab提交代码,代码中必须包含Dockerfile: 2.将代码提 ...

  2. java的random生成某个范围内的随机数

    import java.util.Random; /** * @author HP * @date 2019/4/16 */ public class randomTest { public stat ...

  3. centos 修改网卡信息命令

    vi /etc/sysconfig/network-scripts/ifcfg-eth0

  4. SQLServer外部数据导入--Excel版

    例如要在test表里插入多行数据 假设字段有: ID.Name 首先要有需要导入的数据的Excel A1 对应ID B1 对应Name 选中Excel第一行的空白处,比如C1,在工具栏的函数文本框里输 ...

  5. 网站html代码解析

    1.什么是HTML文件?HTML中文叫做“超文本标记语言”,一个HTML文件不仅包含文本内容,还包含一些标记,一个HTML文件的后缀名是.htm或者是.html.用文本编辑器(Dreamweaver) ...

  6. vue.js $set的使用 数组

    [javascript] view plain copy <!DOCTYPE html> <html lang="en"> <head> < ...

  7. Deutsch lernen (05)

    1. die Wahrheit, -en 真理:  - 真言,实情 Wir sollen die Wahrheit festhalten. 坚持:紧握 Im Wein liegt Wahrheit. ...

  8. OpenCV:OpenCV目标检测Boost方法训练

    在古老的CNN方法出现以后,并不能适用于图像中目标检测.20世纪60年代,Hubel和Wiesel( 百度百科 )在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈 ...

  9. Graph network classification(As a beginner, continue to update)

    Data arrangement 1.Reference Webs http://nlp.csai.tsinghua.edu.cn/~tcc/ https://blog.csdn.net/a60964 ...

  10. 雪花算法生成全局唯一ID

    系统中某些场景少不了全局唯一ID的使用,来保证数据的唯一性.除了通过数据库自带的自增id来保证 id 的唯一性,通常为了保证的数据的可移植性会选择通过程序生成全局唯一 id.百度了不少php相关的生成 ...