es6新增了let和const两个声明变量的关键字,有三个关键字可以声明变量。在日常使用中,它们被应用在不同的作用域中:
es6新增了一个块级作用域。当变量定义在{}花括号内时,外部无法访问该变量。var不具备块级作用域,因为它在{}外面任然可以被访问。
if(true) {
let name = '编程领地'
}
console.log(name) // Uncaught ReferenceError: name is not defined
在函数里面使用var声明的变量。
function fn(){
var number = 1
//函数内部可以使用number变量
}
//函数外部不可以使用number变量
在函数外面使用的变量。
var number = 100
//可以在函数外面使用全局变量
function fn(){
number++
console.log(number)
//可以在函数内部使用全局变量
}
es6之后变量的作用域有三种,分别是全局变量、局部变量、块级作用域。三个关键词声明的变量作用域如下:
// var 局部变量
if(true) {
var var_name = 'var声明 -> 编程领地'
}
// 可以正常输出
console.log(var_name) // var声明 -> 编程领地
//const
if(true) {
const const_name = "const声明 -> 编程领地"
}
console.log(const_name) //Uncaught ReferenceError: const_name is not defined
//let 声明
if(true) {
let let_name = 'let声明 -> 编程领地'
}
console.log(let_name) //undefined
let和var区别是变量的作用域。作用域的不同,变量的访问范围不同。
// var 局部变量
if(true) {
var var_name = 'var声明 -> 编程领地'
}
// 可以正常输出
console.log(var_name) // var声明 -> 编程领地
//const
if(true) {
const const_name = "const声明 -> 编程领地"
}
console.log(const_name) //Uncaught ReferenceError: const_name is not defined
const 声明一个只读的常量,一旦声明,常量的值就不能改变。let 声明的变量只在 let 命令所在的代码块内有效,可以被重新赋值。
//let变量可以重新赋值
let age = 18
age = 19
console.log(age) //19
//const 一经创建,不可修改
const pi = 3.1415926
pi = 22
console.log(pi) // Uncaught TypeError: Assignment to constant variable.