js连续赋值(面试题

// 赋值给a一个引用类型
var a = {n:1};
// 拷贝给b,b指向{n:1}
var b = a;
/*
根据js引擎语法解析,从左向右寻找有没有未声明的变量,
如果有将该变量提升至作用域顶部并声明该变量.
因为a.x不存在,而a指向是是{n:1}因此在{n:1}的内存区声明了x属性;
而x属性指向的是a指向的内存区.
后面a={n:2},将a指向了一个新的内存区{n:2};
而b指向{n:1}所在的内存区,故b拥有了x属性
*/
a.x = a = {n:2};

console.log(a);
console.log(b);
console.log(a.x);
console.log(b.x)

// { n: 2 }
// { n: 1, x: { n: 2 } }
// undefined
// { n: 2 }

 

你可能感兴趣的:(JavaScript乱七八糟)