/**
* 例1. let只在命令所在代码块内有效
*/
{
let a = 10;
var b = 1;
}
// let 只在声明的代码块内有效
// 这里会报ReferenceError(引用错误)
console.log(a);
console.log(b);
/**
* 例2. let只在命令所在代码块内有效
*/
var arr1 = [];
// 每次循环i只在本轮循环有效
for(let i=0; i<10; i++){
arr1[i] = function (){
console.log(i);
};
}
// 输出6
arr1[6]();
/**
* let声明的变量必须要 先声明 再使用
*/
// 输出ReferenceError(引用错误)
console.log(foo);
let foo = 2;
/**
* 块级作用域内存在let命令 它所声明的变量就绑定这个区域 不再受外部的影响
*/
var tmp = 123;
if(true){
// tmp绑定let声明的这个块级作用域 输出ReferenceError(引用错误)
tmp = 'abc';
let tmp;
}
/**
* let 不允许重复声明
*/
function met1(arg){
// let 声明的变量不允许重复声明 否则报错
let arg = '小花';
let a = 10;
var a = 1;
};
met1();
/**
* 例一. const 声明常量 一旦声明 常量的值就不能改变
*/
'use strict';
// const 定义常量pi
const pi = 3.1415;
// 输出3.1415
console(pi);
pi = 4;
// 输出错误
console.log(pi);
/**
* 例二. const 声明的常量只在块级作用域内有效
*/
'use strict'
if(true){
const max = 5;
}
// 输出ReferenceError(引用错误)
console.log(max);
/**
* 例三. const 声明的变量不能重复
*/
// 输出错误
const con1 = 1;
const con1 = 2;
/**
* 例四. 对于复合类型的变量 const声明的变量名不指向数据 而是指向数据所在的地址
const命令只是保证变量名指向的地址不变 并不保证该地址的数据不变
*/
'use strict'
const foo = {};
foo.prop = 123;
// 修改变量的地址报错 必须是严格模式下
foo = {};