Javascript 进阶 8-1 Let, Const 基本概念

这个章节,主要来介绍 ES6 中宣告变数的语法糖,Let 以及 Const。

ES6主要是为了改善以及加快开发速度所产生的语法,也可以避免掉传统ES5一些语法所造成的问题。

那么我们就来看看 Let 以及 Const 要怎么使用吧!

在介绍 Let 以及 Const,我们先来看看 var 宣告变数的时候会有甚么状况~

var 宣告变数 -- 状况1

var a = '1';过了好几千行,或是别的开发者不知道前面有宣告过变数 avar a = 1;

这样执行是没有问题,但结果就会让后面的 a 覆盖掉前面的 a,造成一些非预期的错误。

var 宣告变数 -- 状况2

for (var i = 0; i < 10; i++) {    console.log(i);}

如果我们这样宣告 i ,并且执行了这个 for 迴圈,预期会产生的结果就是印出 0 ~ 9。

http://img2.58codes.com/2024/201217707efTkSElZx.png

但是因为我们是用 var 进行宣告,所以除了在for迴圈可以取得到这个i的变数之外,在迴圈之外的作用域也可以取用的到i。

这就变成我们常提到的全域变数的汙染。

var 宣告变数 -- 状况3

var answer = true;        if (answer) {    var feedBack = '5555';    console.log(feedBack);}console.log(feedBack); // 取得到 feedBack 的值

那为了避免这些汙染,传统的做法就是使用立即函式将这些执行的内容包起来:

(function () {    for (var j = 0; j < 10; j++) {        console.log(j);    }})();console.log(j);

http://img2.58codes.com/2024/201217707KX3xWHPrt.png

Let 以及 Const

首先先来说明一下 Let 以及 Const 两者的差异:

宣告变数的差异

=> Let 宣告后的变数,可以重新赋值修改,但 Const 不行。

let odin = 'husky';odin = 'dog';

http://img2.58codes.com/2024/20121770l59gPufpRt.png

const odin = 'husky';odin = 'dog';

http://img2.58codes.com/2024/20121770vqdKYnFetg.png

另外,刚刚提到如果先用 var 宣告过一次变数,再用 var 宣告另一次相同名称的变数,是没有问题的,但用在 let 或 const上,就会有问题:

http://img2.58codes.com/2024/20121770Pv41aszIg3.png

作用域的差异

var 的作用域是函式的作用域

let 的作用域是Block({})的作用域

也就是说如果使用 let、const 在 Block 的範围内做宣告,在外层是没有办法取用到该变数的喔!

{    let odin = 'dog';    console.log('Block', odin);}console.log('非Block', odin);

http://img2.58codes.com/2024/201217709hfHRE4Vlj.png

并且如果这时候在外层还有重複变数名称的变数宣告,这样他们就不算是同一个变数,也不会报错!

{    let odin = 'dog';    console.log('Block', odin);}let odin = '123';console.log('非Block', odin);

http://img2.58codes.com/2024/20121770bgGgu1RdeB.png

那再来看看刚刚 for 迴圈改成 let 设定变数:

for (let i = 0; i < 10; i++) {    console.log(i);}console.log(i);

http://img2.58codes.com/2024/20121770pgATfZKw8d.png

由于 i 是在 for 迴圈的 Block 中才能被取用到,所以当然在 for 迴圈之外的作用域是取不到 i 的值。

刚刚的 feedback 宣告也是相同的概念,把 feedback 宣告改成 let ,这时候外层作用域就取不到 feedback 的内容了!

var answer = true;        if (answer) {    let feedBack = '5555';    console.log(feedBack);}console.log(feedBack); // 取不得到 feedBack 的值

http://img2.58codes.com/2024/20121770CdxPDsKdch.png

最后是立即函式和 for 迴圈的搭配:

for (let j = 0; j < 10; j++) {    console.log(j);}console.log(j);

因为使用 let ,所以我们也不需要用立即函式包覆起来,let宣告的变数自身的特性就不会污染其他作用域。

真的要限制的话,使用Block就也可以做到限制的目的:

{    let j = 0;}

好~以上就是 let 跟 const 的基本概念,没有问题的话就继续往下巴~汪汪!


关于作者: 网站小编

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

热门文章