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代码提供一个环境,就像地球给人提供环境,人类才有生产活动, 我们把这个环境称之为“全局作用域”。 2.代码自上而下执行(之前还有一个变量提升阶段) 基本数据类型的值会存储在当前作用域下 var a = 12; 1)首先开辟一个空间(栈内存)存储12 2)在当前作用域中声明一个变量a 3)让声明的变量和存储的12进行关联,即把12赋值给a, 赋值操作叫做定义
基本数据类型值(也叫作值类型),是按照值来操作的:把原有的值复制一份放到新的空间或者位置上,和原来的值没有关系。 而引用数据类型的值不能直接存储到当前的作用域下(因为可能过于复杂),我们需要先开辟一个新的空间,把内容存储到这个空间中 var obj1 = {n: 100}; 1)首先开辟一个新的内存空间(堆内存),把对象中的键值对依次存储起来(为了保证后面可以找到这个空间,此空间有一个16进制的地址) 2)声明一个变量 3)让变量和空间地址关联在一起
--- 堆内存用来存储引用类型中的信息值得,对象存储的是键值对,函数存储的是代码字符串 练习题 var obj = { n:10, m: obj.n*10 //此时obj和n还没有关系,空间地址还没有给obj,此时的obj是undefined,而undefined是基本类型,没有属性 }; console.log(obj.m); // Uncaught TypeError
var ary1 = [3,4]; var ary2 = ary1; ary2[0] = 1; ary2 = [4,5]; ary2[1] = 2; ary1[1] = 0; console.log(ary1,ary2);