javascript高级程序设计读书笔记(二)
NO.1 变量
JavaScript变量松散,本质上它只是特定时间用于保存特定值的一个名字而已
JavaScript变量可能包含两种不同数据类型的值:
1.基本类型值,指的是简单的数据段
2.引用类型值,指的是由多个值构成的对象
js的五种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值
引用类型的值是保存在内存中的对象,和其他语言不同,JavaScript不能直接访问内存中的位置,所以js操作对象时,是操作对象的引用而不是实际的对象
简单来说:基本类型指的是普通数据变量,引用类型指的是对象变量
复制变量值:
基本类型:
var num1 = 5
var num2 = num1;
这两个变量是完全独立的
引用类型:
当复制对象时,由于对象的值是需要保存在内存里,复制对象之后,两个对象指向同一个值,相当于新建一个指针指向内存里的值
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "mike"
alert(obj2.name); // mike
传递参数:
所有的参数都是按值传递的!包括参数为对象,也是按值传递的
证明例子:
function setName(obj){
obj.name = "yzq";
obj = new Object();
obj.name = "小东"
}
var person = new Object();
setName(person);
console.log(person.name); //yzq
检测类型:
typeof 检测基本数据类型的时候有用,但是检测对象类型没有意义,通常我们并不想知道某个值是对象,而是想知道它是什么类型的对象
instanceof 用来检测对象是否是某种数据类型
var person = new Object();
alert(person instanceof Object);
NO.2 执行环境及作用域
执行环境定义了变量或函数有权访问其他数据,每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中,虽然代码无法访问这个对象,但是解析器在处理数据的时候会在后台使用它。
如在web浏览器中,全局执行环境被认为是window对象,因此所有的全局变量和函数都是作为window对象的属性和方法创建的。
代码示例:
var color = "blue";
function changeColor (){
var anotherColor = "red";
function swapColors(){
var tempColor = anotherColor;
anotherColor = color;
color = tempColor
}
swapColors()
}
changeColor();
所以执行环境的类型总共只有两种,全局和局部(也就是函数)
变量声明:
加var是局部变量,不加var是全局变量
变量向上查找原则
同名变量,局部变量优先
NO.3 垃圾收集
js是一种具有自动收集垃圾的编程语言,开发人员不必关心内存分配和回收问题
js在函数执行完后,会自动释放内存