javascript 的变量、作用域和内存问题


Posted in Javascript onApril 19, 2017

javascript 的变量、作用域和内存问题

(一)JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型值。基本类型的值源自以下5种基本数据类型:Undefined、Null、Boolean、Number和 String。基本类型值和引用类型值具有以下特点:

1.基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;

2.从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本;

3.引用类型的值是对象,保存在堆内存中;   

4.包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针;

5.从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象;

6.确定一个值是哪种基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。

(二)所有变量(包括基本类型和引用类型)都存在于一个执行环境(也称为作用域)当中,这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。以下是关于执行环境的几点总结:

1.执行环境有全局执行环境(也称为全局环境)和函数执行环境之分;

2.每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链;

3.函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境;

4.全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据;变量的执行环境有助于确定应该何时释放内存。

(三)JavaScript是一门具有自动垃圾收集机制的编程语言,开发人员不必关心内存分配和回收问题。可以对JavaScript的垃圾收集例程作如下总结。

1.离开作用域的值将被自动标记为可以回收,因此将在垃圾收集期间被删除。

2.“标记清除”是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然后再回收其内存。

3.另一种垃圾收集算法是“引用计数”,这种算法的思想是跟踪记录所有值被引用的次数。JavaScript引擎目前都不再使用这种算法;

4.但在IE中访问非原生JavaScript对象(如DOM元素)时,这种算法仍然可能会导致问题。当代码中存在循环引用现象时,“引用计数”算法就会导致问题。

6.为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
避免 showModalDialog 弹出新窗体的原因分析
May 31 Javascript
JS基础之undefined与null的区别分析
Aug 08 Javascript
多种方式实现JS调用后台方法进行数据交互
Aug 20 Javascript
将json当数据库一样操作的javascript lib
Oct 28 Javascript
JS控制文本域只读或可写属性的方法
Jun 24 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
解决vue.js 数据渲染成功仍报错的问题
Aug 25 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
Dec 10 Javascript
javascript实现计算指定范围内的质数示例
Dec 29 Javascript
vue中多个倒计时实现代码实例
Mar 27 Javascript
浅谈Node 异步IO和事件循环
May 05 Javascript
javascript中json对象json数组json字符串互转及取值方法
Apr 19 #Javascript
javascript 中null和undefined区分和比较
Apr 19 #Javascript
jQuery Plupload上传插件的使用
Apr 19 #jQuery
Vuex之理解Mutations的用法实例
Apr 19 #Javascript
Vuex之理解Getters的用法实例
Apr 19 #Javascript
Vuex之理解state的用法实例
Apr 19 #Javascript
微信小程序 聊天室简单实现
Apr 19 #Javascript
You might like
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
php加密解密实用类分享
2014/01/07 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
php框架知识点的整理和补充
2021/03/01 PHP
JavaScript小技巧 2.5 则
2010/09/12 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
Python pickle模块用法实例分析
2015/05/27 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
Python多进程原理与用法分析
2018/08/21 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
详解python中*号的用法
2019/10/21 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
Python流程控制语句的深入讲解
2020/06/15 Python
python 数据类型强制转换的总结
2021/01/25 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
合伙经营协议书范本
2014/04/18 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
市场拓展计划书
2014/05/03 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
小学运动会开幕词
2016/03/04 职场文书
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技