《JavaScript高级程序设计》——第四章 变量、作用域和内存管理
- JavaScript变量可以用保存两种类型的值:基本类型值和引用类型值。基本类型的值源自以下基本类型数据:Undefined、Null、Boolean、Number和String。
- 从一个变量向另一个变量复制引用型类型的值,复制的其实是指针,因此两个变量最终指向同一个变量。
- 确认一个值是哪种引用类型可以用instanceof操作符。
- JavaScript是一门拥有自动回收垃圾机制的语言
- JavaScript没有块级作用域
JavaScript中可以为引用类型值动态添加属性
var person = new Object(); person.name = "Nicholas"; alert(person.name); //"Nicholas"
引用值作为函数参数,向函数传递的是值,但会访问实参
function setName(obj) { obj.name = "Nicholas"; } var person = new Object(); setName(person); alert(person.name); //"Nicholas"
重写函数内部的对象时,变量引用的就是一个局部变量了
function setName(obj) { obj.name = "Nicholas"; obj=new Object(); obj.name="Greg"; } var person = new Object(); setName(person); alert(person.name); //"Nicholas"
在函数内用var声明的变量是局部变量,没有用变量前面没用var声明的是全局变量
function add(num1, num2) { var sum = num1 + num2; return sum; } var result = add(10, 20); //30 alert(sum); //causes an error since sum is not a valid variable
function add(num1, num2) { sum = num1 + num2; return sum; } var result = add(10, 20); //30 alert(sum); //30
查询标识符搜索的过程是从作用域前端开始,向上逐级查询与给定名字匹配的标识符
var color = "blue"; function getColor(){ return color; } alert(getColor()); //"blue"
如果局部变量存在着同名标识符,就不会使用父环境中的标识符
var color = "blue"; function getColor(){ var color = "red"; return color; } alert(getColor()); //"red"