es6的let,const

1.es6 新增的let const 命令

  let用来定义一个局部变量,故名思意就是只在当前代码块可用

  1.1 let 声明的变量不存在变量提升(var 声明的变量存在变量提升)且代码块内 暂时性死区 且不允许重复声明

    列子

var b = 3;
function fn () {
    console.log (b)
    var b = 4
}
fn(); // undefined 
//由于存在变量提升 实际代码是
/* var b = 3;
function fn () {
    var b = undefined
    console.log (b)
    b = 4
} */
//使用let 定义
function fn1() {
    console.log (b)
    let b = 4
}
fn1();
//报错 提示b没有定义   使用let 定义的b 不存在变量提升 并且也访问不到外面定义的b ,暂时性死区
 function fn2() {
  let aa = 3
  let aa = 4
 }
   fn2() //报错,dentifier 'aa' has already been declared 不能重复定义

  1.2 const 常量

  定义:声明后的常量就不能修改,不能重复定义 ,也只在当前代码块内有用,常量定义时必须先赋值

const ba  //报错必须先赋值

{
    const bb = 4
}
console.log(bb) //bb未定义, 只在当前代码块可用

const bc = 56
bc = 54 //报错,常量定义后不能修改值

const person = {
    name: 'czklove',
    age: '18' 
}
person.age = 24 // 不报错,对于引用类型,常量只是不改变他的地址
//可以使用 Object.freeze 冻结
const child = Object.freeze({
    name: 'czklove',
    age: '18'
})
child.name = 'lll' //正常模式下该行代码忽略 严格模式下报错

//如果对象的属性也是引用类型 ,则需要冻结对象上所有的属性,调用递归的方法

  1.3 var 

  es6 之前除了在方法里定义的var 变量之外,所有var 定义的var 变量都是全局可用

var c = 44
function fn3() {
    c = 56
    b = 45
}
console.log(b) //报错 b没有定义
for(var i = 1;i < 9; i++) {
}
console.log(i) //9  for ()里定义的变量 全局可用 
//变量声明提升 可以见let 的例子

  

  

  

posted @ 2019-03-25 19:47  waitklove  阅读(161)  评论(0编辑  收藏  举报