用ES6让代码起飞—块级作用域与let和const
各位小伙伴,欢迎来到“用ES6让代码起飞”系列博客的第1篇!这个系列博客的初衷是帮助大家深入理解ES6的所有知识点,让大家的代码更加简洁优雅,编程生活更加愉快。 每篇博客我会分享1个ES6的知识点,并通过生动有趣的代码片段帮助你们轻松掌握。准备好了吗?让我们从第1个知识点开始吧!
第一期:块级作用域与let
和const
为什么要关心块级作用域?
还记得我们曾经因为变量作用域问题摔的那些跟头吗?用var
声明的变量总是让我们哭笑不得。幸运的是,ES6为我们带来了let
和const
,它帮助我们解决了这个问题。
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中的块级作用域以及let
和const
的使用。通过这些新的声明方式,我们可以避免很多由变量作用域引起的问题,让代码更加可靠。
我是前端霸哥,愿你的代码中没有bug 写的不好的地方,欢迎各位小伙伴批评指正
转载自:https://juejin.cn/post/7380579040824115238