一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂更不容易,要熟练js更是难,中间需要不断的积累与重温.因此不是读一两遍就能把这书吃透,需要多读,可谓温故而知新,可以为师矣. 温馨提示:笔记言辞会有主观色彩,知识重点记录.博客内容为基础,适合初学者. 同系列: 第一篇:JavaScript--我发现,原来你是这样的JS(一)(初识) 第二篇…
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂更不容易,要熟练js更是难,中间需要不断的积累与重温.因此不是读一两遍就能把这书吃透,需要多读,可谓温故而知新,可以为师矣. 同系列: 第一篇:JavaScript--我发现,原来你是这样的JS(一)(初识) 第二篇:JavaScript--我发现,原来你是这样的JS(二)(基础概念--躯壳…
编程语言 从低级到高级的发展的过程 1.机器语言 计算机是基于电工作的.(基于高.低电平 1010010101011) 如果用机器语言表现一个字符的意思需要多段代码的行.但是计算机读取的快. 所以机器语言的 优点:执行速度够快 缺点:开发效率非常低 2.汇编语言 汇编语言的属性,汇编语言通过英文字符组成 优点:执行效率相较于机器语言略低 缺点:开发效率相较于机器语言略高 举个例子: ; hello.asm section .data ; 数据段声明 msg db "Hello, world!&q…
编程语言分为 机器语言(直接用二进制01跟计算机直接沟通交流,直接操作硬件) 优点:计算机能够直接读懂,速度快 缺点:开发效率极低 汇编语言(用简单的英文标签来表示二进制数,直接操作硬件) 优点:开发效率高于机器语言 缺点:执行效率较机器语言 高级语言(直接用人类识别的字符去编写程序,不能直接操作硬件,需要借助特殊工具转换成机器语言去操作硬件 高级语言分为 编译型语言:借助编译器转换成机器语言,一次编译生成执行文件再去执行,若要修改源代码需要重新编译生成执行文件,如C.C++.Delphi等 优…
编程语言分类:机器语言.汇编语言.高级语言. 机器语言:机器能直接识别的程序语言或指令代码(二进制指令),勿需经过翻译,每一操作码在计算机内部都有相应的电路来完成它 汇编语言:比机器语言略高级,用英文标签代表一组二进制指令操作机器 高级语言:分为编译型(C.C++.go)和解释型(C#.Python.Java(先编译后解释)). 开发效率:高级语言(解释型)>高级语言(编译型)>汇编语言>机器语言 执行效率:机器语言>汇编语言>高级语言(编译型)>高级语言(解释型) 跨…
代码回收规则如下: 1.全局变量不会被回收. 2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁. 3.只要被另外一个作用域所引用就不会被回收  (闭包)…
一.垃圾回收机制的必要性 由于字符串.对象和数组没有固定大小,所以当它们的大小已知时,才能对它们进行动态的存储分配.JavaScript程序每次创建字符串.数组或对象时,解释器都必须分配内存来存储那个实体.只要像这样动态地分配了内存,最终都要释放这些内存以便它们能够被再用,否则,JavaScript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃. JavaScript的解释器可以检测到何时程序不再使用一个对象了,当它确定了一个对象是无用的时候,它就知道不再需要这个对象,可以把它所占用的内存…
js垃圾回收机制:标记清除 Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理 当变量进入环境时,将这个变量标记为"进入环境".当变量离开环境时,则将其标记为"离开环境".标记"离开环境"的就回收内存. 工作流程 1.    垃圾回收器,在运行的时候会给存储在内存中的所有变量都加上标记. 2.    去掉环境中的变量以及被环境中的变量引用的变量的标记. 3.    再被加上标记…
Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理:是当变量进入环境时,将这个变量标记为“进入环境”.当变量离开环境时,则将其标记为“离开环境”.标记“离开环境”的就回收内存. 工作流程: 1.    垃圾回收器,在运行的时候会给存储在内存中的所有变量都加上标记. 2.    去掉环境中的变量以及被环境中的变量引用的变量的标记. 3.    再被加上标记的会被视为准备删除的变量. 4.    垃圾回收器完成内存清除工作,销毁那…
垃圾积累过多,致使程序运行缓慢,什么是垃圾? 当堆中某个内容,再也没有指针指向它,我们将再也用不了它,此时就是一个垃圾. 出现这种情况是因为 obj = null; 此时,js 中的垃圾回收机制会自动回收垃圾. 因此,对于不需要的变量,我们只需要  xxx = null; 即可,剩下的交给垃圾回收机制处理.…
变量实现原理决定了Python使用的垃圾回收机制为变量引用计数,当这个对象引用计数为0时候,则会自动执行__del__函数回收资源, del方法只是把变量指向的对象引用计数减一而已并删除这个变量 表达式: 运算符和操作符所构成的序列 什么是变量? 一种抽象,计算机用来保存现实数据的容器,通过这个变量抽象可以写入现实数据到计算机中,并且可以读取变量取到保存到计算机中的现实数字化数据 在Python中变量名只是一个符号,而不是一个内存区块 names = ("BeiMenChuiXue",…
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包.不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”.看下面这段代码:function a() {var i = 0;function b() { alert(++i); }return…
function a() { ; function b() { alert(++i); } return b; } var c = a(); c(); 一.闭包的微观世界 如果要更加深入的了解闭包以及函数a和嵌套函数b的关系,我们需要引入另外几个概念:函数的执行环境(excution context).活动对象(call object).作用域(scope).作用域链(scope chain).以函数a从定义到执行的过程为例阐述这几个概念. 1.当定义函数a的时候,js解释器会将函数a的作用域链…
闭包是什么? ·了解闭包首先了解js的‘链式作用域’结构,对象可以一级一级的向上查找父对象的变量,所以父对象的变量对子对象可见,反之不成立:所以都可以访问全局变量 ·为了解决函数外部无法访问函数内局部变量的问题,就在父函数中定义一个子函数并让它访问了父函数的局部变量,再通过父函数返回该子函数就实现了调用局部变量的效果: ·而上面中的子函数就是闭包,所以闭包的定义是“能够读取其他函数内部变量的函数”,其实简单理解就是“一个定义在函数中的函数”: 示例 function parent(){ ,b=;…
局部作用域内的变量,在函数执行结束之后就会被js的垃圾回收机制销毁   为什么要销毁局部变量? => 为了释放内存   js垃圾回收机制何时会销毁局部变量 : 如果局部变量无法再得到访问,就会被销毁 如果局部变量还可以在后续得到访问,则这个局部变量就不会被销毁   如何让局部变量在函数调用结束之后还可以访问? => 函数套函数 : return了子函数,父函数内的变量就不会被销毁,为什么?   => 因为作用域链的存在,导致fn作用域不会被销毁  => fn作用域不会被销毁,则局部…
作用域链 基本概念: 在了解作用域链和内存之前,我们先了解两个概念,分别是执行环境和变量对象. 执行环境:定义变量或者函数有权访问的其他数据,决定了它们各自的行为.每个对象都有自己的执行环境. 变量对象:包含执行环境中所有变量和函数都保存在这个对象中,每个执行环境都有一个与之关联的变量对象.但是我们无法访问. 作用域链: 在我们了解这两个概念之后,我们来了解一下作用域链. 作用域链主要是保证对执行环境有权访问的所有变量和函数的有序访问.作用域的前端,始终都是当前执行的代码所在环境的变量对象.作用…
摘要: 不是每个人都回答的出来... 最近看到一些面试的回顾,不少有被面试官问到谈谈JS 垃圾回收机制,说实话,面试官会问这个问题,说明他最近看到一些关于 JS 垃圾回收机制的相关的文章,为了 B 格,就会顺带的问问. 最近看到一篇讲 JS 垃圾回收的国外文章,觉得讲得明白,所以就翻译过来了,希望对你们有所帮助. 垃圾回收 JavaScript 中的内存管理是自动执行的,而且是不可见的.我们创建基本类型.对象.函数--所有这些都需要内存. 当不再需要某样东西时会发生什么? JavaScript…
前言 JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存. [原理]找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间),周期性地执行这一操作. 在学习垃圾回收机制之前让我们先来学习下执行环境及作用域 执行环境 执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对…
垃圾回收机制 JS中最常见的垃圾回收方式是标记清除. 工作原理:是当变量进入环境时,将这个变量标记为“进入环境”.当变量离开环境时,则将其标记为“离开环境”.标记“离开环境”的就回收内存. 工作流程: 1.    垃圾回收器,会给存储在内存中的所有变量都加上标记. 2.    去掉环境中的变量以及被环境中的变量引用的变量的标记. 3.    再被加上标记的会被视为准备删除的变量. 4.    垃圾回收器下一次运行时,完成内存清除工作,销毁那些带标记的值并回收他们所占用的内存空间. 引用计数 方式…
垃圾回收器是一把十足的双刃剑.好处是简化程序的内存管理,内存管理无需程序员来操作,由此也减少了长时间运转的程序的内存泄漏.然而无法预期的停顿,影响了交互体验.本文从 V8 (node.js runtime) 的角度分析垃圾回收策略. 暂时没弄懂v8的,有时间再研究 下面的是js垃圾回收 内存的生命周期: 分配你所需要的内存 使用分配到的内存(读.写) 不需要时将其释放\归还 所以,我们只要知道js引擎怎么判断内存变量不再需要,就知道js是在什么时候回收内存变量了. 我们先来说一种古老的垃圾回收机…
起因是因为想了解闭包的内存泄露机制,然后想起<js高级程序设计>中有关于垃圾回收机制的解析,之前没有很懂,过一年回头再看就懂了,写篇博客与大家分享一下. #内存的生命周期: 分配你所需要的内存: 由于字符串.对象等没有固定的大小,js程序在每次创建字符串.对象的时候,程序都会分配内存来存储那个实体. 使用分配到的内存做点什么. 不需要时将其释放回归: 在不需要字符串.对象的时候,需要释放其所占用的内存,否则将会消耗完系统中所有可用的内存,造成系统崩溃,这就是垃圾回收机制所存在的意义. 所谓的内…
 壹 ❀ 引 从事计算机相关技术工作的同学,对于内存空间相关概念多少有所耳闻,毕竟像我这种非计算机科班出身的人,对于栈堆,垃圾回收都能简单说道几句:当我明白JS 基本类型与引用类型数据存储方式不同,才对于为何要使用深拷贝恍然大悟.只是知道和深入了解是两码事,那么这篇文章从内存空间说起.  贰 ❀ 栈.堆与队列 与c语言这种底层语言不同,JavaScript并没有提供内存管理的接口,而是在创建变量时自动分配内存,当变量不再需要使用时自动释放,也就是我们所常说的垃圾回收机制. 但不管是什么程序语言,…
javascript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存.在编写javascript程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理.下面将详细介绍javascript的垃圾收集机制 原理 垃圾收集机制的原理很简单:找出那些不再继续使用的变量,然后释放其占用的内存,垃圾收集器会按照固定的时间间隔,或代码执行中预定的收集时间,周期性地执行这一操作 局部变量只在函数执行的过程中存在.而在这个过程中,会为局部变量在栈(或堆)内存上分…
一.命名空间.作用域.LEGB法则. 1.命名空间和作用域 : 命名空间:变量名称与值的映射关系 作用域:变量作用的区域,即范围. 注意:class/def/模块会产生作用域:分支语句,循环语句,异常处理语句不会产生新的作用域. 2.作用域的类型区分: 命名空间:变量名称与值的映射关系 作用域:变量作用的区域,范围. 作用域分类型: 局部作用域:Local 简称 L 嵌套作用域:Enclosing 简称 E 全局作用域: Global 简称 G 内置作用域:Builtin 简称 B 3.LEGB…
垃圾回收机制,简称GC(garbage collection),会定期(周期性)地回收那些不再使用的变量,然后释放其内存. 而内存占用的情况有很多: 1.变量 2.字面量对象声明:var obj = {}: 3.数组声明 : var arr = []: 4.函数声明: function fun(){}; 上述情况都会占用内存. 通常的解决方法:标记清除:引用计数. 1.标记清除:盒子原理,当变量要进入执行环境,则将该变量标记为"进入环境",该标记表示不能清除回收该变量,当变量离开执行环…
一.变量 1. 什么是变量 量:记录事物的某种状态,即事物典型的特征 变:事物的状态是可以发生变化的 2. 为何要用变量 是为了让计算机能够像人一样记录事物的状态 3. 如何用变量 (先定义后引用) (一)先定义 age=18 定义变量由三部分组成: 变量名:访问值得唯一方式     =:把值的内存地址绑定变量名            变量的值:使我们存储的数据,用来代表事物的某种状态 (二)后引用          print(age) 二.垃圾回收机制         引用计数:增加   …
[V8引擎]浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略 垃圾回收机制 如何判断回收内容 如何确定哪些内存需要回收,哪些内存不需要回收,这是垃圾回收期需要解决的最基本问题.我们可以这样假定,一个对象为活对象当且仅当它被一个根对象 或另一个活对象指向.根对象永远是活对象,它是被浏览器或V8所引用的对象.被局部变量所指向的对象也属于根对象,因为它们所在的作用域对象被视为根对 象.全局对象(Node中为global,浏览器中为window)自然是根对象.浏览器中的DOM元素也属于根对象…
1.编程语言的发展史 计算机是基于电工作(基于高.低电平)1010010101011 1.机器语言 优点:执行速度够快 缺点:开发效率非常低 2.汇编语言(通过英文字符组成) 优点:执行效率相较于机器语言略低 缺点:开发效率相较于机器语言略高 ; hello.asm section .data ; 数据段声明 msg db "Hello, world!", 0xA ; 要输出的字符串 len equ $ - msg ; 字串长度 section .text ; 代码段声明 global…
目录 编程语言分类 运行Python程序的两种方式 1.交互式 变量与常量 1.变量 2.常量 3.小整数池 垃圾回收机制 编程语言分类 编程语言分为: 1.机器语言:直接用二进制的0和1和计算机(CPU)直接沟通交流,直接操作硬件. 2.汇编语言:用简单的英文标签来表示二进制数,直接操作硬件. 3.高级语言:它并不是指某一种语言,而是包括很多编程语言,比如:PHP.c/c++.Java.C#.python.go等 # 机器语言 优点:不需转换,计算机能直接读懂,执行速度快. 缺点:二进制代码复…
谈谈 JS 垃圾回收机制 JS内存泄漏与垃圾回收机制 https://javascript.info/garbage-collection…