Open Brand0n-Zhang opened 2 years ago
1.
// 输出
undefined
ReferenceError: b is not defined
var不会产生块级作用域,let会产生块级作用域。
伪代码相当于:
var a;
if(false){
a = 1;
let b = 2;
}
console.log(a);
console.log(b);
2.
// 输出
ReferenceError: Cannot access 'a' before initialization
let声明的变量不会提升,并且会产生暂存死区。在let声明变量之前访问变量会抛出错误。
3.
// 输出
2 1
undefined {n: 2}
var b = a,此时a和b指向同一个对象。
.运算符比 = 运算符高,先计算`a.x`,此时
b = {
n:1,
x:undefined
}
相当于给对象添加了x属性。
a.x = a = {n:2};
计算完a.x,再计算 = ,赋值是从右向左,此时a指向一个新对象。
a = {
n:2
}
a.x已经执行过了,此时对象的x属性赋值为a,此时
对象 = {
n:1,
x:{
n:2
}
}
即:
a = {
n:2
}
b = {
n:1,
x:{
n:2
}
}