这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战
块级作用域
ES2015的标准增加了:block-scoping即块级作用域,这篇文章我们就来了解一下什么是块级作用域。
通过var声明的变量或者非严格模式下(non-strict mode)创建的函数声明没有块级作用域。在语句块里声明的变量的作用域不仅是其所在的函数或者 script 标签内,所设置变量的影响会在超出语句块本身之外持续存在。
块级作用域就是用于组合零个或多个语句,该块由一对大括号界定。
如何使用
var声明
var name = '也笑';
{
var name = 'slifree';
}
console.log(name); // slifree
var声明的变量是没有块级作用域的。
let声明
let name = '也笑';
{
let name = 'slifree';
}
console.log(name); // 也笑
let声明的变量是有块级作用域,只能获取到当前作用域的变量。但是这里需要我们注意的是:如果在同级作用域下用let声明的两个相同的变量会报错,报错如下:
SyntaxError: Identifier 'name' has already been declared
如果我们如上述代码用{}包裹形成一个单独的作用域,则不会报错。
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: '也笑' }
总结
- 在项目中,我们定义的变量都有特定意义,不允许重复定义,所以我们一般用
let声明变量。 const一般用来声明常量,意思是我们定义的变量其值不会再发生变化。
如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。