javascript变量作用域与内存

第四章 变量作用域与内存
基本类型 5种
Undefined Null Boolean Number String
两种变量类型 基本类型与引用类型
注意:String 再其他语言中是引用类型,再javascri中为基本类型
即:这五种基本类型是按值访问的
引用类型是按照引用访问的

动态的属性
对于一个引用类型,一个引用变量被赋值后,可以为其添加属性,也可以删除与修改其属性
var o = new object();
o.name = "qi"; //可以为引用变量添加属性

变量的复制
基本类型的复制:两个变量做复制时,两个变量是相互独立的内存空间
引用类型的复制:两个变量实际上指向同一块堆内存地址

参数的传递是 按值传递(这个值包括基本类型,以及分配在栈中引用的值,即传递对象时,实参与形参引用同一个对象)

typeof 操作符 基本类型检测
instanceof 可以检测该引用属于什么类型的对象

全局变量 局部变量 作用域链(使用try-catch和with会在作用域链的前端临时加长)
与类C语言不同的是:没有块级作用域
注意:在 if和for 中定义的变量,也会添加到当前执行环境
(在类C语言中,if for声明的变量,在判断/循环体结束后会自动释放,而javascript则会保留)

声明:
var生命的变量会自动加入最近的执行环境;没有使用var声明的则自动加入全局环境变量
垃圾收集:
(1)标记清除(主流;在标记中去掉进入执行环境的变量,然后在将被标记的变量清除)
(2)引用技术
性能问题:
在ie中,变量或者对象的个数,数组长度以及字符串长度可以在动态的调整触发浏览器执行垃圾回收的动作(使用临界值来触发)
也可以显示的调用(不建议)
内存管理:
因为浏览器分配的内存较少(相对于桌面程序),因此为了获取更好的性能,一旦数据不再使用,最好将其置空,接触引用
解除引用的目的在于让变量脱离执行环境,便于被下一轮GC标记清除

转载于:https://www.cnblogs.com/luckyQi/p/7518590.html

你可能感兴趣的:(javascript变量作用域与内存)