likes
comments
collection
share

用ES6让代码起飞—块级作用域与let和const

作者站长头像
站长
· 阅读数 61

各位小伙伴,欢迎来到“用ES6让代码起飞”系列博客的第1篇!这个系列博客的初衷是帮助大家深入理解ES6的所有知识点,让大家的代码更加简洁优雅,编程生活更加愉快。 每篇博客我会分享1个ES6的知识点,并通过生动有趣的代码片段帮助你们轻松掌握。准备好了吗?让我们从第1个知识点开始吧!

第一期:块级作用域与letconst

为什么要关心块级作用域?

还记得我们曾经因为变量作用域问题摔的那些跟头吗?用var声明的变量总是让我们哭笑不得。幸运的是,ES6为我们带来了letconst,它帮助我们解决了这个问题。

var的困扰

首先,让我们看看使用var时可能会遇到的问题:

function oldSchool() {
  for (var i = 0; i < 3; i++) {
    setTimeout(function() {
      console.log(i); // 输出 3,3,3
    }, 1000);
  }
}

oldSchool();

解释: 使用var声明的变量i在整个函数作用域内都是共享的,因此在定时器回调中,i已经变成了3。

let的救赎

现在,让我们看看使用let会有什么不同:

function newSchool() {
  for (let i = 0; i < 3; i++) {
    setTimeout(function() {
      console.log(i); // 输出 0,1,2
    }, 1000);
  }
}

newSchool();

解释: 使用let声明的变量有块级作用域,for循环中的i在每次迭代中都是一个新的变量,这样我们就可以得到正确的输出。

const的特别之处

const声明的变量一旦赋值,就不能再被修改。它非常适合用来声明那些不会改变的值。

const pi = 3.14159;
console.log(pi); // 3.14159

// 尝试修改会导致错误
// pi = 3.14; // Uncaught TypeError: Assignment to constant variable.

解释: const确保了变量的值不会被改变,这对于维护数据的稳定性非常有用。

结语

在今天的博客中,我们介绍了ES6中的块级作用域以及letconst的使用。通过这些新的声明方式,我们可以避免很多由变量作用域引起的问题,让代码更加可靠。

我是前端霸哥,愿你的代码中没有bug 写的不好的地方,欢迎各位小伙伴批评指正

转载自:https://juejin.cn/post/7380579040824115238
评论
请登录