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 相关文章推荐
基于jQuery的合并表格中相同文本的相邻单元格的代码
Apr 06 Javascript
特殊日期提示功能的实现方法
Jun 16 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
12 款 JS 代码测试必备工具(翻译)
Dec 13 Javascript
基于canvas粒子系统的构建详解
Aug 31 Javascript
浅析JS抽象工厂模式
Dec 14 Javascript
浅析Vue实例以及生命周期
Aug 14 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
Aug 25 Javascript
详解vue项目接入微信JSSDK的坑
Dec 14 Javascript
vue watch关于对象内的属性监听
Apr 22 Javascript
Vue实现搜索结果高亮显示关键字
May 28 Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 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
10条PHP编程习惯助你找工作
2008/09/29 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
Python入门篇之字符串
2014/10/17 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
儿童编程python入门
2018/05/08 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
法学专业本科生自荐信范文
2013/12/17 职场文书
读书活动实施方案
2014/03/10 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
科技活动周标语
2014/10/08 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
2015年超市工作总结
2015/04/09 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
2015年酒店工作总结
2015/04/28 职场文书
信息简报范文
2015/07/21 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书