变量提升
关于数据值的操作机制
栈内存:作用域
1.提供一个存放供js代码自上而下执行的环境(代码都是在栈中执行的),
2.由于基本数据源类型值都比较简单,他们都是直接在栈内存中开辟一个位置,把值直接存进去
ps:当栈内存被销毁,存储的那些基本值也就被销毁了。
堆内存:引用值对应的空间
1.存储引用类型值(对象:键值对 函数: 代码字符串)
ps:当前堆内存释放销毁,那么这个引用值彻底没了
堆内存的释放:当堆内存没有被任何变量或任何其他东西所占用,浏览器会在空闲的时候,自主的进行回收,把所有不占用堆得内存销毁掉(谷歌浏览器,IE浏览器采用计数的功能,但有时候计数会出现混乱,也就导致了内存泄漏问题)。
XXX=null 通过空对象指针null可以让原始变量(或其他东西)谁都不指向,从而原来被占用的堆内存就不再被占用,浏览器就会销毁它。
变量提升
JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。
-
console.log(a);
-
var a = 1;
上面代码首先使用console.log方法,在控制台(console)显示变量a的值。这时变量a还没有声明和赋值,所以这是一种错误的做法,但是实际上不会报错。因为存在变量提升,真正运行的是下面的代码。
-
var a;
-
console.log(a);
-
a = 1;
最后的结果是显示undefined,表示变量a已声明,但还未赋值。

浙公网安备 33010602011771号