在 [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 没有出来之前,严格的说只有两种
- var声明一个变量
- function声明一个函数
但 ECMAScript 2016 之后,因为添加了 const 、let 和 import 关键字,所以声明一个变量的方式编程了 5 种
- const声明一个不可变变量,也就是常量
- let声明一个块级别的可变变量 ( 区分 const )
- 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 级别的。
            目前尚无回复
        
    
    