// 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。
立即执行函数直通车👉 https://blog.youkuaiyun.com/weixin_43876206/article/details/106025126
这篇博客探讨了JavaScript中的变量作用域,特别是在立即执行函数中的应用。讲解了let声明的变量在块级作用域内的行为,以及如何在函数内部改变全局变量的值。还提到了赋值操作的顺序和暂时性死区的概念。对于理解和避免常见的作用域错误有很好的指导意义。
580

被折叠的 条评论
为什么被折叠?



