杂七杂八广记系列 第十回 : var 、 let 、const

哈瞜大家好 我是阿华,今天来跟大家聊聊var 、 let 、const 三种宣告变数的差别

var 、 let 、const 三种宣告变数的差别

let 和 const主要解决了var三个问题,分别是没有块级作用域、重複宣告、变数提升,下面我们接着看:

作用域(Scope)区别:

在 ES6 以前 宣告变数是用 var,而它宣告的变数存在于函数作用域或全局作用域中。而 let 和 const 是在 ES6 中引入的,它们引入了块级作用域的概念,变数存在于它们被宣告的块(例如花括号 {})内部。

重複宣告:

使用 var 可以重複宣告同一个变数后面宣告会覆盖掉前面的,而 let 和 const 不允许在同一作用域内重複宣告相同的变数名。

变数提升:

var 有变数提升的特性,即无论在哪里宣告变数,它都会被提升至所在作用域的顶部,使得在宣告之前就可以使用该变数。
而 let 和 const 不具有变数提升,试图在变数宣告之前访问变数会产生暂时性死区(Temporal Dead Zone,TDZ)错误。

其他不同的点:

可变性:

let 宣告的变数是可变数,可以重新赋值。而 const 宣告的变数是常数,一旦赋值就不能再更改。

在 Window Object 中

使用 var 会在 Window Object 找得到,而 let 和 const 找不到。

适用场景:

在实际应用中,推荐使用 const,除非需要重新赋值,才考虑使用 let;而避免使用 var,因为它存在一些潜在的问题,比如变数提升、作用域与同一名称变数被覆盖的问题。

最后我们来看一个经典的例子:

// 综合 IIFE 闭包 作用域for (var i = 1; i <= 5; i++) {  setTimeout(function () {    console.log(i);  }, 0);}

上面例子会打印5个5,要如何让他依序打印1-5呢?

第一种方法是使用let去宣告变数i,让它作用于它的块级作用域

for (let i = 1; i <= 5; i++) {  setTimeout(function () {    console.log(i);  }, 0);}

第二种方法,是透过IIFE去给函数作用域并执行,让用var宣告的i作用于函数作用域

for (var i = 1; i <= 5; i++) {  (function (i) {    //相当于闭包    setTimeout(function () {      console.log(i);    }, i * 1000);  })(i);}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章