JS的运行机制:堆栈内存(3)

本文深入探讨JavaScript的运行机制,从全局作用域、变量声明与赋值到基本数据类型与引用数据类型的差异。通过示例解释了基本类型按值操作,而引用类型按引用地址操作,导致的值共享与相互影响。同时,分析了数组作为引用类型在赋值与修改值时的内存变化,揭示了JavaScript内存管理的微妙之处。
摘要由CSDN通过智能技术生成
var a = 12;
var b = a;
b = 13;
console.log(a); //=>12

var obj1 = {n: 100};
var obj2 = obj1;
obj2['n'] = 200;
console.log(obj1.n); //=>200

/*

 * 浅分析JS的运行机制

 *  1、当浏览器(它的内核\引擎)渲染和解析JS的时候,会提供一个供JS代码运行的环境,我们把这个环境称之为“全局作用域(global/window scope)”

 *

 *  2、代码自上而下执行(之前还有一个变量提升阶段)

 *   =>基本数据类型的值会存储在当前作用域下

 *    var a = 12;

 *    1)首先开辟一个空间存储12

 *    2)在当前作用域中声明一个变量a (var a)

 *    3)让声明的变量和存储的12进行关联(把存储的12赋值给a =>赋值操作叫做定义)

 *

 *    基本数据类型(也叫作值类型),是按照值来操作的:把原有的值复制一份,放到新的空间或者位置上,和原来的值没有关系

 *

 *   =>引用数据类型的值不能直接存储到当前的作用域下(因为可能存储的内容过于复杂),我们需要先开辟一个新的空间(理解为仓库),把内容存储到这个空间中

 *   var obj1 = {n: 100};

 *   1)首先开辟一个新的内存空间,把对象中的键值对依次存储起来(为了保证后面可以找到这个空间,此空间有一个16进制的地址)

 *   2)声明一个变量

 *   3)让变量和空间地址关联在一起(把空间地址赋值给变量)

 *

 *   引用类型不是按照值来操作,它操作的是空间的引用地址:把原来空间的地址赋值给新的变量,但是原来的空间没有被克隆,还是一个空间,这样就会出现多个变量关联的是相同的空间,相互之间就会存在影响了

 */

2、

/*
 * 1、形成一个全局作用域(栈内存)
 * 2、代码自上而下执行
 *   1.首先开辟一个新的堆内存(AAAFFF111),把键值对存储到堆内存中
 *     n:10
 *     m:obj.n*10 =>obj.n 此时堆内存信息还没有存储完成,空间的地址还没有给obj,此时的obj是undefined,obj.n<=>undefined.n
 */
/*
var obj = {
    n: 10,
    m: obj.n * 10 //=>Uncaught TypeError: Cannot read property 'n' of undefined
};
console.log(obj.m);
*/
var obj = {
    n: 10
};
obj.m = obj.n * 10;
console.log(obj.m);//=>100

 3、

var ary1 = [3, 4];
var ary2 = ary1;
ary2[0] = 1;
ary2 = [4, 5]; //=>开辟新的堆内存,修改ary2内存地址
ary2[1] = 2;
ary1[1] = 0;
console.log(ary1, ary2); //=>[1,0] [4,2]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值