JavaScript值类型与执行环境和垃圾处理机制
JavaScript变量分为基本值类型和引用值类型,基本值类型就是以下这五种:Boolean,Number,String,Null,Undefined。基本值类型和引用值类型具有以下特点:
1.基本值类型在内存中占用固定的大小,所以被放入栈中(String是值类型,放入栈)
2.变量复制变量基本类型的值会创建这个值的副本
3.引用类型是对象,放入堆中
4.包含引用值类型的变量不是对象本身,而是一个对象的指针
5.引用类型变量复制时复制的是指针因此两个变量指向一个对象
6.确认值是那种基本类型可以用typeof操作符,确定是哪种引用类型可以用instanceof操作符
所有的变量(基本值类型和引用值类型)都存在于一个执行环境,也就是作用域,这个环境决定了那些代码可以访问其中的变量,以下是总结:
1.执行环境分全局执行环境和函数执行环境。每次进入一个新的环境都会创建一个用于搜索变量和函数的作用域
2.函数执行环境有权访问函数作用域中的变量,而且有权访问其包含环境乃至全局环境。
3.全局环境只能访问在全局环境中定义的变量和函数而不能直接访问局部环境中的任何数据。
4.变量环境是因为帮助确定何时该释放内存
JavaScript是一门有自动垃圾收集器的编程语言,开发人员不必关心内存分配和回收问题,总结如下:
1.离开作用域的值会被标记为可回收,在垃圾收集期间将被删除
2.“标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的变量加上标记,然后再清除。
3.另一种垃圾收集算法是“引用计数”这种算法的思想是跟踪记录值被引用的次数,目前浏览器都不再使用。但是IE中访问Dom对象时会产生问题。因为IE引用了C++的Com,用的依旧是引用计数。这种算法仍然可能导致问题
4.接触变量的引用有助于消除循环引用现象,而且对垃圾收集也有好处。应该及时的清除全局对象,全局对象属性以及循环引用变量的引用。
以上是本人看书总结,如果转账请注明出处
JavaScript值类型与执行环境和垃圾处理机制的更多相关文章
- javascript 作用域链与执行环境
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 作用域.作用域链.执行环境.执行环境栈以及this的概念在javascript中非常重要,本人经常弄混淆, ...
- JavaScript值类型和引用类型有哪些
JavaScript值类型和引用类型有哪些 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数.
- javascript中函数的执行环境、作用域链、变量对象与活动对象
javascript高级程序设计中:对执行环境.作用域链.变量对象.活动对象的解释: 1.执行环境: 执行环境:有时也叫环境:是JavaScript中最为重要的一个概念:执行环境定义了变量或函数有权访 ...
- JavaScript之JS的执行环境和作用域
一.执行环境是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为,每个执行环境都有一个与之关联的变量对象(variable object),环境 ...
- JavaScript 值类型和引用类型的初次研究
今天遇到一个坑,具体的不多说,直接上代码 var a = [ [],[],[1,2,3] ] var b = ['颜色','大小','尺寸'] var arr = [] for(let i = 0; ...
- JavaScript:值类型 引用类型
JavaScript类型 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数. 1.string var str="hongda"; v ...
- javascript 值类型与引用类型
写的比较简单哈,只是用来记忆下 (1)值类型:undefined.null.Boolean.Number和String (2)引用类型:对象.数组.函数
- JavaScript中变量、执行环境、作用域与C#中的异同
首先需要明确一个执行环境的概念,执行环境这个概念是用来理解作用域的,在js中,执行环境分为全局执行环境和局部(function)执行环境,而在C#这类的C类语言中,还有一个块级别的执行环境,如if语句 ...
- javascript 值类型和引用类型
值类型 1. 值类型:string/number/boolean/undefined: 2. 存储:值类型的数据,存储的是数据本身的变量: 3. 赋值:直接将存储的数据复制一份进行赋值,两份数据在内存 ...
随机推荐
- IIS服务器多域名证书绑定443端口解决方案
一个服务器IIS要绑定多个HTTPS站点(该方法在此之前,有进行测试其他网站域名的ssl证书,测试没有问题) 默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTT ...
- Open DS
0: 1. Develope OpenDS from here: eu.opends.main --> Simulator.java --> main()
- PHP如何实现网址伪静态
Apache的 mod_rewrite是比较强大的,在进行网站建设时,可以通过这个模块来实现伪静态. 主要步骤如下: 1.检测Apache是否开启mod_rewrite功能 可以通过php提供 ...
- 【CLR via C#】CSC将源代码编译成托管模块
下图展示了编译源代码文件的过程.如图所示,可用支持 CLR 的任何一种语言创建源代码文件.然后,用一个对应的编译器检查语法和分析源代码.无论选用哪一个编译器,结果都是一个托管模块(managedmod ...
- IoC组件~Autofac将多实现一次注入,根据别名Resove实例
回到目录 对于IoC容器来说,性能最好的莫过于Autofac了,而对于灵活度来说,它也是值得称赞的,为了考虑系统的性能,我们经常是在系统初始化于将所有依赖注册到容器里,当需要于根据别名把实现拿出来,然 ...
- K60——寄存器
(1)PTx_BASE_PTR为GPIO寄存器结构体基址指针(PTR即point to register,x=A/B/C/D/E) /* GPIO - Peripheral instance base ...
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- 基于Cesium1.26地图API下的GeoServer2.9.0服务器跨域设置
遇到的问题: 最近基于Cesium来做3D模型的地图开发,在访问自己发布的WMS服务之后,遇到了GeoServer跨域问题. 调用这个WMS服务的时候,浏览器(我用Chrome)开发者工具报错: 控制 ...
- 在终端terminal运行ReactNative程序经常出现的问题
各种问题汇总: 1.Unable to resolve modules lodash (这里举例lodash,这个lodash也可以是别的.意思就是缺少当前模块,所以需要安装) npm instal ...
- RunLoop 总结:RunLoop的应用场景(二)
上一篇讲了使用RunLoop保证子线程的长时间存活,而不是执行完任务后就立刻销毁的应用场景.这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动时,依然能正常运转. 参考资料 好的书籍都是值 ...