重学js ---- [变量,作用域链]

1.基本类型和引用类型的值

在操作对象时,实际上是在操作对象的引用而不是实际的对象,5中基本数据类型是按值访问

在基本类型与引用类型的调用方面也与类c语言有很大区别

1.我们不能给基本类型的值添加属性,即使这样不会导致任何错误

var name = "van";
name.age = 27;
alert(name.age) //undefined

2.在复制变量方面

​ 基本数据类型: 创建一个新的存储空间,将值赋值过去,两个变量各自的操作不会对对方产生任何影响

​ 引用数据类型: 同样会分配存储空间,但是存储的是值实际上是一个指针,指向堆中的一个对象,

​ 操作结束后,两个指针指向同一个对象,一个改变影响另一个。

// 基本数据类型
	var a = 1;
	var b = a;
	b = 2;
	console.log(a === b) // false
// 此时a 与 b 是两个不同的变量,操作不相通

//引用数据类型
	var a = {};
	var b = a;
	b.name = 'van';
	console.log(a.name) //van
// 此时 a 与 b 存储的值指向同一个堆中的变量,操作会改变另一个变量

2.没有块级作用域

在js 中没有块级作用域的概念,那么有些时候我们写的代码可能会得到一些意想不到的结果

for(var i=0;i<10;i++){}
console.log(i); //10
这就是没有块级作用域的坏处, i 变量居然能跑到上一级的作用域中了

3.垃圾收集

一般是两种方式 标记清除 与 引用计数

4.小结

  • 基本数据类型保存在栈中,引用数据类型保存在堆中
  • 基本数据类型复制的是值,引用数据类型复制的是一个指针副本
  • 进入一个新执行环境,会创建一个作用域链
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值