变量,作用域和内存问题
1,基本类型和引用类型的值
基本类型指的是:简单的数据段;(5种基本的数据类型)
引用类型值:由多个值构成的对象;(操作对象 es 不能直接访问内存地址,而是通过引用去访问)
2,动态的属性
引用类型的值可以添加属性, var person = new Object(); person.name = 'pppp' alert( person.name )
而基本类型不行
3,复制变量值(得好好理解)
复制基本类型
var num1 = 5 ; num2 = num1; 这样两个变量有了相同的值,但是他们是独立的,各自代表的不同;内存存储的位置不同,改变一个值不会影响另一个值;
复制引用类型
从一个对象引用的值赋值给另一个,两个变量引用的是同一个对象,因此改变一个会影响另一个的
4,传递参数
把函数外部的值传递到函数的内部;
基本类型:传递过程中被传递的值会复制给一个局部变量(即命名参数,或者 arguments 对象的一个元素),
引用类型:传递过程是把内存中的地址复制给局部变量;(注意局部值,和全局值)
5,检测值的类型
typeof 可以检查基本类型;但有时检测不出;
就需要使用instanceof 用法: alert( arr instanceof object ) 检查是否为对象 (只能检查引用类型)
二,执行环境及作用域(先了解一下,后面慢慢整理)
执行环境定义了变量或函数有权访问的其他数据,决定他们各自的行为,
全局变量在web中被认为是 window对象,(只有在程序退出才会销毁)
在写代码的时候,一定注意全局变量和局部变量
延长作用域链: try-catch , with