变量、作用域和内存问题

1. 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已。
(1)基本类型的值在内存中占据固定大小的空间,因此会保存在栈内存中;
(2)引用类型的值是对象,保存在堆内存中。
堆内存:随意存储,一般由程序员分配释放,或者程序结束时有OS回收。
栈内存:先进后出,有编译器自动分配释放,存放函数的参数值、局部变量的值等。

2. 不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。操作对象时,实际上是在操作对象的引用而不是实际的对象。

3.复制
基本类型(undefined、null、boolean、number、string)复制,会创建这个值的一个副本,完全独立;
引用类型(对象)复制,复制的其实是指针,两个变量引用同一个对象。

var num1 = 57;
var num2 = num1;
num1 = 38;
console.log(num1, num2);    // 38 57

var obj1 = new  ();
var obj2 = obj1;
obj1.name = \'ligang\';
console.log(obj2.name);     // \"ligang\" 

\"在这里插入图片描述\"

收藏 打印