[ES2016] 中的 const 和声明一个变量的所有方法

yufei       6 年, 3 月 前       1388

[ES2016] 中的 let 和块级作用域 我们讲解了 ECMAScript 2016 中引入的声明变量的新关键字,其实,那个规范还引入了另一个关键字 const 用于声明不可变变量,也有很多人称之为 「 常量关键字 」

const

const 的用法和作用域类似于 let ,唯一的差别就是 let 声明的变量是可变的,可以重复赋值,而 const 声明的变量是不可变的,不能再次赋值

例如下面的代码是可行的

let name = 'yufei';
console.log(name);
name = 'hero';
console.log(name);

输出结果如下

yufei
hero

但下面的代码是不可行的,会报错

const name = 'yufei';
console.log(name);
name = 'hero';
console.log(name);

运行结果如下

yufei
Uncaught TypeError: Assignment to constant variable.

意思是 name 是一个不可变变量,一定定义就不可重复赋值。

const 只声明而不赋值会报错

JavaScript 中的 const 不能像其它语言那样可以把声明和定义分开,声明而不定义 ( 赋值 ) 是会报错的

例如下面的代码

const name;
console.log(name);
name = 'yufei';
console.log(name);

运行结果如下

Uncaught SyntaxError: Missing initializer in const declaration

意思就是不可变变量 name 没有初始化。

JavaScript 中声明变量的方式

这应该是一个面试常考题目,在 ECMAScript 2016 没有出来之前,严格的说只有两种

  1. var 声明一个变量
  2. function 声明一个函数

但 ECMAScript 2016 之后,因为添加了 constletimport 关键字,所以声明一个变量的方式编程了 5 种

  1. const 声明一个不可变变量,也就是常量
  2. let 声明一个块级别的可变变量 ( 区分 const )
  3. import 从一个模块中导入一个变量

这五种声明变量的方法,作用域如下

变量提升 作用域 Creates global properties
var Declaration Function Yes
let Temporal dead zone Block No
const Temporal dead zone Block No
function Complete Block Yes
class No Block No
import Complete Module-global No

函数参数算不是算一种声明变量的方法呢 ?

其实吧,我觉得应该算,但是,好像没有哪个语言会把函数的参数当作一个变量来对待,虽然它长的的确和变量一样,而且作用域还是 function 级别的。

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.