js变量、作用域和内存问题

基本类型和引用类型的值

    基本类型是简单的数据段,可以操作保存在变量中的值。
    引用类型是那些可能有多个值构成的对象,她的值是保存在内存中。
*只能给引用类型动态的添加属性

1.复制变量值的区别:
基本类型复制的只是一个副本,两个值虽然相同但是是完全独立的。互不影响
引用类型复制之后指向的是同一个对象。改变其中一个变量,就会影响另一个变量。

复制操作结束后,两个变量实际上将引用同一个对象

2.传递参数:
*访问变量有按值按引用两种方式,而参数只能按值传递。
基本类型传递参数:
    num是函数的局部变量,调用函数时,count作为参数被传递给了函数,10被复制给了参数num,在函数内部,参数num被加了10,但这不会影响函数外部的count变量。

基本类型传递参数

引用类型传递参数:

引用类型对象也是按值传递

即使在函数内部修改了参数的值,但原始的引用仍然保持未变。
加深理解

3.检测类型
*基本数据类型使用typeOf操作符。
*引用类型使用instanceof操作符。(是引用类型都会返回true,基本类型都返回false)
alert(person instanceof Object);   //变量person是Object吗
alert(person instanceof Array);   //变量person是Array吗
alert(person instanceof RegExp);   //变量person是RegExp吗

执行环境与作用域

全局环境

*内部环境可以通过作用域链访问所有的外部环境 。但是外部环境不能访问任何内部环境的变量和函数。(局部环境会开始在自己的变量对象中搜索变量名和函数名,如果搜索不到则搜索上一级作用域链)

延长作用域链
with语句
try-catch语句的catch块

没有块级作用域
js没有块级作用域。
if语句和for语句中创建的变量在循环和判断结束后,也依然会存在于外部的执行环境中。

1.声明变量

除非不声明color,否则不无访问局部环境的变量(不声明就是全局变量)

2.查询标识符:
实例比较(不断向外查找,一旦找到最近的就停止搜索)

垃圾收集

js具有自动垃圾收集机制。
原理:找出那些不再继续使用的变量,然后释放其占用的内存。

js中变量的生命周期

标记清除(最常用的垃圾收集方式)
引用计数(不太常见的)

return问题
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容