ECMAScript变量 | |
基本类型:5 | 引用类型 |
存于内存栈 | 实际对象位于内存堆 |
按值访问,可操作保存在变量中实际的值 | js不能直接操作对象的内存空间,而是操作它的引用 |
不可添加属性和方法 | 可添加属性和方法 |
变量复制是一个实际的值,互不干扰 | 变量复制是一个指针,指向相同的对象,改变其中一个变量会影响另一个 |
Undefined | |
Null | |
Boolean | |
Number | |
String | |
variable | typeof v | v instanceof constructor |
var v; | undefined | false |
var v=true; | boolean | false |
var v=23; | number | false |
var v="string" | string | false |
var v=null; | object | false |
var v=new Object(); | object | 1||0 |
var v=function(){} | function | 1||0 |
var v=//; | function or object | 1||0 |
ECMAScript中所有函数的参数都是按值传递的,参数实际上是函数的局部变量。
作用域:
执行环境有全局执行环境和函数执行环境之分
每个执行环境都有一个对应的变量对象,变量对象的作用域链,用途是保证 对 执行环境有权访问的变量和函数 的有序访问。
在with语句,及try-catch语句中,会在作用域链前端生成一个临时变量对象,width为指定对象,catch会创建新的变量对象。
js中没有块级作用域
垃圾回收:
1:标记清除(进入或离开执行环境)
2:引用记数(被引用+1,反之-1),不能避免循环引用的问题(ie9-的COM)
v=null,解除引用
JavaScript高级程序设计-第四章-变量、作用域和内存问题,布布扣,bubuko.com
JavaScript高级程序设计-第四章-变量、作用域和内存问题
原文地址:http://www.cnblogs.com/inmay/p/3756937.html