博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四章 变量、作用域、内存问题
阅读量:5360 次
发布时间:2019-06-15

本文共 992 字,大约阅读时间需要 3 分钟。

1、基本类型和引用类型的值:五种基本数据类型属于基本类型值,对象属于引用类型值,JS不允许对内存访问,因而操作对象时实际是操作对象的引用。

  ①动态的属性:可以给对象添加属性和方法,也可以删除和变更;

  ②复制变量值:复制引用类型的值实际是复制了在内存堆中该数据的指针;

  ③传递参数:传递给函数的参数的值如果是引用类型的值,则会将该值的地址传递给参数;

  ④检测类型:检测基本数据类型时使用typeof操作符,检测引用类型比如null/对象/数组/正则表达式时,使用instanceof操作符,使用方法: 变量 instanceof Object/Array/RegExp.

2、执行环境及其作用域:分为全局执行环境和局部执行环境,全局执行环境实际上被认为是windows对象,全局变量及其函数都被当做windows对象的属性和方法,每个函数都存在自己的执行环境,当执行流进入一个函数时,会将该函数的执行环境推入环境栈,函数执行结束后,再弹出环境栈。

  ①作用域链:每个函数执行时,都会创建一个作用域链,用于保证该执行环境能够有权访问到该执行环境下的所有变量和方法,如果在当前执行环境找不到,则会往函数外的执行环境找,直到window对象下的全局环境,如果没找到则报错。即里面可以访问外面,外面不能访问里面。

  ②延长作用域链:catch语句和with语句,对于with语句而言,会将语句中的对象插入到当前执行环境的前端中,从而包含该对象的所有属性和方法,在执行环境结束后被销毁,而catch语句则会捕获错误对象,从而抛出错误。

  ③没有块级作用域

3、垃圾收集:JS的垃圾收集机制原理:找到那些不再继续使用的变量,然后释放所占用的内存,通常使用两种标记方法来标记哪些变量不再使用,以便清除。

  ①标记清除:变量进入内存时会被标记为进入环境,函数执行结束时,变量被标记为离开环境,对于离开环境的变量将执行内存清除工作;

  ②引用计数(不常用):存在循环引用的问题;

  ③性能问题:确定垃圾回收的时间间隔时个问题;

  ④管理内存:手动解除占用,比如使用完一个全局对象和变量后,赋值为null,但这并不意味着自动回收了内存。

转载于:https://www.cnblogs.com/Liqian-Front-End-Engineer/p/11207967.html

你可能感兴趣的文章
Swift迎来了1.0 GM 版(2014.09.09)
查看>>
【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查...
查看>>
《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
查看>>
Java 编程下实现随机无重复数字功能
查看>>
Android 编程下的代码混淆
查看>>
animation属性
查看>>
页内的模块和组件抽象规划经验
查看>>
安全-分析深圳电信的新型HTTP劫持方式
查看>>
将Centos的yum源更换为国内的阿里云源
查看>>
git diff 的用法
查看>>
一段sql的优化
查看>>
十进制与十六进制的相互转换
查看>>
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>
POJ1062 昂贵的聘礼
查看>>
【零基础学习iOS开发】【02-C语言】08-基本运算
查看>>
Java 将指定字符串连接到此字符串的结尾 concat()
查看>>
Hibernate Criterion
查看>>
Python知识
查看>>
我们为什么要搞长沙.NET技术社区(三)
查看>>