// console.log(b);Uncaught ReferenceError: b is not defined let a = b = 10;//key1 // 这个是一个立即执行函数 (function(){ let a = b =20;//key2 })() console.log(a);//10 console.log(b);//20
运行结果:
解析:key1处声明了两个变量,一个是let类型的a变量,一个是全局的b变量(不是var类型,因为如果是var类型的话,它会有变量提升的)。
key2处k也声明了两个变量,一个是let类型的a变量,一个是全局的b变量(因为没有使用var关键字声明)。
综上知,所以我们在里边给b赋值,相对于是给全局的b赋值,所以打印出来b的值为20。let的作用域是块级作用域,只在本作用域起作用,而且还有暂时性死区。
赋值语句是从右往左,也就是先把20赋值给b,然后再赋值给a。