js之变量、数据、内存篇

9 篇文章 0 订阅
7 篇文章 0 订阅

内存:用于存放变量对象常量的物理空间。js中内存空间可分为三种:栈(stack)、堆(heap)、池(一般归类于栈中)
->栈:存放变量,特点:先进后出,后进先出。例如:string、number、boolean、null、undefined
->堆:存放复杂对象,特点:不能被直接访问,更不能直接操作堆空间,只能引用访问、操作。释放引用,会被浏览器自动垃圾回收,释放内存空间。例如:object、function、array
->池:存放常量

内存释放:先看下手动回收例子:

var a = 20;  // 在内存中给数值变量分配空间
alert(a + 100);  // 使用内存
var a = null; // 使用完毕之后,释放内存空间,等待下一次自动垃圾回收处理

自动垃圾回收机制:定时间隔的找出哪些没被使用的值,然后释放其占用的内存。所以要及时的清除无效的引用。
例如es6中的WeakMap就是一个弱引用的map结构。不会干扰自动垃圾回收机制。

数据:储存在内存中的信息。

数据类型
->基本数据(值)类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol
->复杂数据(引用)类型:对象(Object)、数组(Array)、函数(Function)

变量:储存在栈中的内存空间。

变量声明:var、let、const
->未声明,赋值,自动创建全局变量
->未声明,未赋值,直接使用会* 报错 *

变量提升:一句话概括,只要var声明的变量,都会声明提前
注意:只针对非严格模式下有效,
提前原则:变量提前,值留原地。
->在任何地方未声明的变量,直接赋值操作,不会声明提前。
->var声明的变量,无论是否设置始化值,全局下会声明提前至全局,函数内会提前在函数块的顶端。

<script>

            console.log(a); //undefined
			console.log(b); //undefined
			console.log(c); //报错,ReferenceError: c is not defined

			//	先声明,再赋值
            var a;
			a = 3;

			//  声明并初始化
			var b = 4;

			//未声明,直接赋值
			c = 5;

        </script>

->let、const声明的变量、常量,只存在于声明的块中,不会声明提前,但会存在一个暂时性死区。

function do_something() {
  console.log(bar); // undefined
  console.log(foo); // ReferenceError: foo is not defined
  var bar = 1;
  let foo = 2;
}

let在同级块作用域中,不允许重复声明,否则会报错。
->函数的两种方式:

//函数表达式,变量提前,函数留原地
var test= function(){
	......
}
//函数声明,整个函数进行声明提前
function test(){
	......
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值