JavaScript中的变量赋值底层逻辑

js中创建一个值,分为三部分:
1、创建一个值(如果这个值是基本类型值,就直接在栈内存中直接创建,如果是引用类型值,需要在堆内存开辟一个新的空间,把里面的内容存储进去)
2、创建一个变量(先把值创建好后,才是创建变量)
3、让值与变量相关联

所有的指针赋值都是关联指向

接下来会以一些实例来加以说明。

var obj = {
	name:"xiaoming",
	fn:(function(a){
		return function(){
			console.log(a);
		}
	})(obj.name)
}

很显然你运行这段代码是会报错的,根据我们这三条规则来看,第一个创建一个值,这个值是引用类型的值,所以在堆中开辟一个地址来存放这个对象的内容

他会把fn里面的立即执行函数执行完把值赋给fn,而这个时候,obj还未被定义(其实这个时候他已经定义了,只是因为变量提升的原因,用let定义的话是不会被定义的),这时候的onj是undefined,让undefined.name是会报错的,因为undefined他不是一个引用值。至于其他的基本类型值后面点什么不会报错是什么原因,是包装类的内容,这里不展开讲,后期会讲到。

第三才是变量关联,这时候报错了,代码无法执行到这一步。

这些值都放在哪里呢,都会放在VO(G)中,VO(G)是什么东西会在下另一篇文章介绍。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值