读书笔记----变量、作用域、内存问题

变量

基本类型值

简单的数据段 Undefined Null Boolean Number String

1.         按值访问的(可以操作保存在变量中的实际的值)

2.         保存在栈内存

3.         复制变量值(创建一个新值)

4.         确定哪种基本类型(typeof

引用类型值

保存在内存中的对象

1.         按引用访问的(操作对象的引用,而不是操作实际的对象)

2.         保存在堆内存

3.         动态添加属性

4.         复制变量值(复制的是指针,不同变量引用同一个对象)

5.         确定哪种引用类型(instanceof

l  所有函数的参数都是按值传递的。

l  在局部作用域中修改的对象会再全局作用域中反映出来,就说明参数是按引用传递的(×)  P71

检测类型

typeof

字符串 string

数值 number

布尔值 Boolean

undefined

object(对象,null)

instanceof

person instanceof Object  对象

person instanceof Array   数组

pattern instanceof RegExp 正则

作用域

所有变量(基本类型、引用类型)都存在于一个执行变量(作用域)

执行环境全局环境函数执行环境

l  每进入一个新的环境,创建一个作用域链

l  函数的局部环境,有权访问函数作用域中的变量,有权访问其包含环境,直至全局环境。

l  全局环境只能访问在全局环境中定义的变量和函数,不能直接访问局部环境中的任何数据。

l  变量的执行环境,有助于确定合适释放内存

执行环境/环境

执行环境 变量对象(环境中定义的所有变量、函数

全局执行环境 (最外围的一个执行环境  web浏览器中为window对象)

环境中代码执行完 →  环境销毁 →变量对象(环境中定义的所有变量、函数)销毁

每个函数 → 自己的执行环境

环境中代码执行 → 创建变量对象作用域链(函数,活动对象作为变量对象 arguments对象)

下一个变量对象来自外部环境,一直到全局环境

标识符解析:沿着作用域链一级一级地搜索标识符的过程

延长作用域链

1.        Try-catch语句的catch块(IE8有问题)

2.        With语句

JS没有块级作用域

l  即使在for循环结束后,i也依旧存在于循环外部的执行环境中。

l  适用var声明的变量,自动添加到最接近的环境中。

l  没有var声明的变量,自动添加到全局环境。

JS自动垃圾收集机制

标记清除

最主流的垃圾收集算法,不适用的值加上标记,然后收回内存

引用计数

跟踪记录所有值被引用的次数。

IE中非原生JS对象(DOM对象),有问题

循环引用,有问题

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值