您的位置:首页 > 其它

变量和对象在内存中如何存储?

2018-01-23 16:52 232 查看
两个面试题:

var a = 10;
function a(){
console.log(a);
};
a();


var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log(a.x);
console.log(b.x);
console.log(a);
console.log(b);


答案:





做对了吗?

下面分别分析这两个面试题:

1.javascript是单线程的,自上而下有序执行

2.javascript执行代码前,将变量,函数,参数提取出来,进行预加载处理(函数声明优先于变量声明。)

//预加载:
var a;
var a = function(){
console.log(a);
};
//执行
//a = 10;
//a();


第一题:

考虑:a函数永远不被调用?

答案是:如果先调用的话,是可以调用的.因为在预加载时,函数声明优先级高,a此时存储着a函数的地址,指向a函数.(number和地址,我们选择地址)

但是为什么在这个面试题中无法调用,a is not a function.

原因是:变量赋值时,a变量存储number10,已经不再指向函数,并且这个函数被销毁.

图解:



var a;
var b;
a = {n: 1};
b = a;
a.x = a = {n: 2};
console.log(a.x);
console.log(b.x);
console.log(a);
console.log(b);


第二题:

考虑:连等的情况是指向同一个地址内存.

a.x 与 a 都指向{n: 2}对象的内存地址.

所以输出b.x可以输出{n:2},本质上是x属性存储的是object2的地址.(见下图)

图解:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: