ES2015之块级作用域

325 阅读2分钟

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

块级作用域

ES2015的标准增加了:block-scoping即块级作用域,这篇文章我们就来了解一下什么是块级作用域。

通过var声明的变量或者非严格模式下(non-strict mode)创建的函数声明没有块级作用域。在语句块里声明的变量的作用域不仅是其所在的函数或者 script 标签内,所设置变量的影响会在超出语句块本身之外持续存在。

块级作用域就是用于组合零个或多个语句,该块由一对大括号界定

如何使用

  1. var声明
var name = '也笑';
{
  var name = 'slifree';
}
console.log(name); // slifree

var声明的变量是没有块级作用域的。

  1. let声明
let name = '也笑';
{
  let name = 'slifree';
}
console.log(name); // 也笑

let声明的变量是有块级作用域,只能获取到当前作用域的变量。但是这里需要我们注意的是:如果在同级作用域下用let声明的两个相同的变量会报错,报错如下:

SyntaxError: Identifier 'name' has already been declared

如果我们如上述代码用{}包裹形成一个单独的作用域,则不会报错。

  1. const声明
let const = '也笑';
{
  let const = 'slifree';
}
console.log(const); // 也笑

const的用法与let类似,但它又不同于let,这就是需要我们注意的地方。

注意事项

let声明的变量,其值可以改变;const声明的变量,其值一般不可以改变。 const一般定义的是常量,如果是基础类型的数据则不能改变,如下:

const name = '也笑';
name = 'slifree';

这种情况则会报错,报错提示如下:

TypeError: Assignment to constant variable.

如果是引用类型的数据,则可能可改变,如下:

不能如此使用,否则报错

const obj = {};
obj = { name: '也笑' }

可如此来改变值

const obj = {};
obj.name = '也笑'
console.log(obj); // { name: '也笑' }

总结

  1. 在项目中,我们定义的变量都有特定意义,不允许重复定义,所以我们一般用let声明变量。
  2. const一般用来声明常量,意思是我们定义的变量其值不会再发生变化。

如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。