let&const

作者: 文千会 | 来源:发表于2017-11-27 23:49 被阅读0次

let基本用法

声明变量,类似var,但所声明的变量只在let命令所在代码块内有效

不存在变量提升

  • let不像var ,必须声明之后才可以使用,不会出现变量提升现象(即变量可以在声明完成之前使用)
    eg:
    let x;
    x=x //正常 undefined
    let x =x //ReferenceError
    var x=x //正常

暂时性死区(TDZ)

  • 区域中存在let/const命令,则这个区块对这些声明的变量,从一开始就形成了封闭作用域,只要在声明之前使用这些变量,就会报错。
    eg:
    var x=1,y=2,z=3;
    if (true) {
    //对于变量x和y TDZ开始
    console.log(z);//3
    console.log(x);//ReferenceError
    console.log(y);//ReferenceError
    let x,y;//TDZ结束
    }

不允许重复声明

  • let不允许在相同作用域内重复声明同一个变量
    eg:
    function(arg){
    let arg //ReferenceError;
    {
    let arg //不报错
    }
    }

const基本用法

const声明一个只读常量,一旦声明常量的值,就不能再更改
const PI=3.1415
PI=3 // 报错
const 声明常量,必须立即初始化,不能留到以后赋值
const PI//报错
const和let 相似,存在TDZ,不存在变量提升,不可重复声明

实质上,const声明的变量,指向的内存地址不变,对于简单类型的数据(数值,字符串,布尔值),值就存在内存地址中,而对于复合类型的数据(对象,数组),内存地址保存的是指针,也就是说 const声明的对象,只可以指向初始化的那个对象,不可指向其他对象了

注:如果你想将对象冻结:可以const foo = Object.freeze({});
绝对冰冻:
var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key,i) => {
if( typeof obj[key] === 'object'){
constantize(obj[key]);
}
})
};

相关文章

  • let&const

    let基本用法 声明变量,类似var,但所声明的变量只在let命令所在代码块内有效 不存在变量提升 let不像va...

  • ES6快速使用

    let const let&const介绍let:声明变量,类似于var,但let所声明的变量只在let命令所在的...

  • 2018-12-20-周末学习

    ES6的深入认识(1) let&const 首先列出我对于let和cons起初粗浅的认识 let ≈ var,co...

  • ES6笔记

    let&const 1、新增块级作用域2、let -- 作用于 块级作用域3、const声明一个只读的常量。一旦...

  • 36 个JS 面试题为你助力金九银十(面试必读)

    1.JS中let和const有什么用?在现代js中,let&const是创建变量的不同方式。在早期的js中,咱们使...

网友评论

      本文标题:let&const

      本文链接:https://www.haomeiwen.com/subject/fvujbxtx.html