第四章 变量、作用域与内存
1.变量包含原始值和引用值。
原始值(primitive value)就是最简单的数据,引用值(reference value)则是由多个值构成的对象。
在把一个值赋给变量时,JavaScript 引擎必须确定这个值是原始值还是引用值。
原始值: Undefined 、 Null 、 Boolean 、 Number 、 String 和 Symbol 。
2.关于原始值和引用值的复制问题
原始值复制后就会完全复制,变成两个独立的变量,不会相互影响
引用值复制的值实际上是一个指针,它指向存储在堆内存中的对象。操作完成后,两个变量实际上指向同一个对象,因此一个对象上面的变化会在另一个对象上反映出来。
3.函数的传递参数
1.如果是原始值传入,并在函数内改变这个原始变量的值,并不会对函数作用域外的原始变量有影响。
let name = "Jack"; function changeName(name){ name = "Alen"; } changeName(name); console.log(name); // Jack
2.如果参数是引用值传入,则改变引用值的属性,则会对函数作用域外的引用值属性产生影响。
let obj = new Object(); function addName(obj){ obj.name = "Alen"; }; addName(obj); console.log(obj.name);//Alen
3.参数是按值传递的,这意味着在函数内部改变引用值的引用指针地址,并不会对外部的引用对象产生影响。
let obj = new Object(); function addName(obj){ obj.name = "Alen"; obj = new Object(); obj.name = "Jack"; }; addName(obj); console.log(obj.name);//Alen
4.ECMAScript 中函数的参数就是局部变量。