标签:define 丢失 变量 为什么 优先 OLE nbsp 就是 核心
1. var a = {n:100};
var b=a; 为什么要有这步, 因为后面对a的赋值操作会丢失a对{ n:100 } 的引用
a.x = a = { n:200 }; 这是核心考点
console.log( a.x );
console.log( b.x );
解析:
1). js的赋值运算顺序永远都是从右往左的,但是 a.x = a = { n:200 }中, 由于"."是优先级高于"="赋值运算符,所以这行代码先执行了a.x, 即 为变量a引用的{n:100}对象中添加x属性, 并初始化为undefined, 此时初始化完成, 就等待赋值了 此时 a 引用的对象变成了 { n:100, x: undefined }。
2). 这时才开始赋值操作, a = { n:200 } 再 a.x = { n:200 }, 这时不会因为a.x 中的a的引用变了, a.x再去重新初始化, 而是接着赋值给原先的a.x,即 { n:100, x:{ n:200 }}
总结: 最重要考点: 就是连等赋值 和 变量.属性优先级, 还有 代码在运行前已经编译完毕, 后续会按先前编译的初始化环境赋值
2..
标签:define 丢失 变量 为什么 优先 OLE nbsp 就是 核心
原文地址:https://www.cnblogs.com/andy-lehhaxm/p/10743605.html