ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## let和var的区别 * let不会变量提升 * var会变量提升 ~~~ console.log(example) var example=1 ~~~ 它不会报错: ![](https://box.kancloud.cn/39bf885bf17b7a378c29a1aa0b84f6de_117x37.png) 如果是let ~~~ console.log(ex2) let ex2=2 ~~~ 它会报错: ![](https://box.kancloud.cn/8f66223a202f1bec6ce9cd8c53ea3a43_271x49.png) 因为js在执行代码的时候,首先都会把var的变量提升到最顶部,然后在自己所在的位置再给他赋值,所以第一个不会报错,而Let的化,它不会提升所以会报错 ## let的使用 * 一般情况下,使用Let都会放在封闭代码的顶部,以便整个代码块都可以访问 * 如果再统一执行环境下,var 一个变量 再同时let 一个同名变量会报语法错误 ~~~ var count = 30; let count = 40; ~~~ ![](https://box.kancloud.cn/ad341cf32b1509f47d2d73abc42a5207_300x57.png) * 但是在不同执行环境下就不会报错如: ~~~ var count = 30; if(true){ let count = 40; } console.log(count) ~~~ ![](https://box.kancloud.cn/17864fd290878b7bb5592d177479b53d_120x47.png) 由let 后面的变量一离开 {}代码块,就会立即被销毁,所以上面打印出来的值是30 ## const * const是常量,一旦声明了就无法更改 * const必须初始化(即必须赋初始值),不然会报错: ~~~ const age; console.log(age) ~~~ ![](https://box.kancloud.cn/a340c6cd7166fab25ea821c8e0e23443_302x41.png) 一般情况下要这么写: ~~~ const age = 10; console.log(age) ~~~ * const和let一样,也是块级标识符,所以const 只在当前代码块内有效,一旦执行到块外,就会被销毁,同样const也不会被提升至作用域顶部 **** TDZ(临时死区) 与var 不同,let以及const 并不会变量提升,当Js引擎搜索变量声明时,要么把变量提升至作用域顶部(var),要么将声明放入临时死区,访问临时死区的变量就会触发运行错误: 如: ~~~ if(true){ console.log(typeof value);//引用错误 let value = "blue" } ~~~ ~~~ console.log(typfof value);//undefinded if(true){ let value = 'blue' } ~~~