js变量和作用域
js变量和作用域 (一)js变量 1. 变量数据类型和堆栈 1.1 数据类型 1.2 堆栈 2. 变量值的比较 3. 参数的传递 4. 类型检测 4.1 typeof 4.1 instanceof (二)js变量的作用域与解析 1. 变量对象及作用域链 2. js解析机制 2.1 预解析 2.2 解析冲突 2.3 逐行解析 (一)js变量 1. 变量数据类型和堆栈 1.1 数据类型 基本数据类型 数字 字符串 布尔值 undefined null 基本数据类型的值不能被修改,其值保存在栈中,当变量赋予新的值,栈中的值被覆盖 引用数据类型 对象 数组 引用数据类型的值可以被修改,其地址保存在栈中,值保存在堆中 1.2 堆栈 栈 堆 基本数据类型 a 值 引用数据类型 b 地址1 地址1 { } c 地址2 地址2 { } 2. 变量值的比较 基本数据类型 由于其值保存在栈中,每次比较都是栈中的值进行比较 引用数据类型 其地址保存在栈中,每次比较进行的都是栈中地址的比较,从堆栈表格中就可以看出,两个相同的对象,其保存在栈中的地址是不相同的 var a = { } , b = { } ; console . log ( a === b ) ; //得出结果为flase 总结:js中变量的比较是保存在栈中内容的比较 3. 参数的传递 基本数据类型 参数复制定义变量的值后进行传递 var a