1、let与const关键字

let 与 const 是es6语法中新增的两个关键字,用来定义变量与常量。(之前只有var定义变量)

let 与 const的特性:

  • let 声明的变量只在 let 命令所在的代码块内有效。
  • const 声明一个只读的常量,一旦声明,常量的值就不能改变。
  • 代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。在声明前使用都会报错。

let语法:

  • 代码块内有效
<code>{
let names = '全栈旅行';
var ages = '1'
}
console.log(ages) // 1
console.log(names) // ReferenceError: names is not defined/<code>
  • 不能重复声明
<code>let age = 1;
let age = 2; // Identifier 'age' has already been declared
var names = '全栈旅行';
var names = 'es6';
console.log(names) // es6
console.log(age)/<code>
  • 没有变量提升
<code>console.log(names);  // ReferenceError: names is not defined
let names = "全栈旅行";

console.log(age); // undefined
var age = 1;/<code>
  • for循环体中使用
<code>/**
* 输出五个 5
* 用var声明的变量是全局的。setTimeout 定时器里面的 i 指的是全局变量 i。
* 循环体结束后才执行settimeout,总共执行5次settimeout。此时的i 已经是5了。所以输出五个5
*/
for (var i = 0; i < 5; i++) {
setTimeout(function(){
console.log(i);
})
}


/**
* 输出 01234
* 用let 声明的变量作用域是代码块,每次循环的 j 其实都是一个新的变量。
* 相当于每次循环都会开辟新的空间。
*/
for (let j = 0; j < 5; j++) {
setTimeout(function(){
console.log(j);
})
}/<code>

const语法:

  • 基本用法
<code>const PI = "3.1415926";  // const定义的常量初始化必须赋值
console.log(PI) // 3.1415926

// 普通类型修改引起报错
PI = 'es6' // TypeError: Assignment to constant variable./<code>
  • 暂时性死区
<code>// 原理参考上面的let 和 const特性第三点
var PI = "";
if(true){
console.log(PI); // ReferenceError: Cannot access 'PI' before initialization
const PI = "3.1415926";
}/<code>
  • 定义引用类型
<code>const obj = {'name': '全栈旅行', age: 1}
obj.name = 'es6' // 引用类型修改没有报错,const值实为指向实际数据的指针。其实指针是没有变。一旦指针发生变化,则报错
console.log(obj) // {'name': 'es6', age: 1}/<code>
ES6 - 1、let与const关键字


分享到:


相關文章: