ES6 -- let和const

LET和const敕令

var

  • 变量声明提拔准绳

  • var语句声明的变量的作用域是当前实行位置的上下文

  • 给一个非声明变量赋值会隐式建立一个全局变量(全局object的一个属性),注重这里黑白声明赋值

  • 声明和赋值是两回事,注重辨别,referenceError和undefined

  • 函数实行时,函数内部的变量才会声明,而且只声明一次,不会反复声明,实行完成后烧毁,函数内挪用时为挪用其援用

let

  • 和var差别,声明可所以块级的,也就是for函数内的n个函数块,let会声明n个变量( 每进入一次for花括号就生成了一个块级域 )

  • 和var差别,反复定义会报错typeError 假如在子域内反复声明,是能够的。

  • 和var差别,没有变量提拔, let声明之前,该变量都是不可用的。称之为: 暂时性死区(temproal dead zone简称 TDZ)

let 块 供应了一种在块的范围内猎取变量的值,而不会影响块表面名字雷同的变量的值的要领

var x = 5;
var y =0;
let(x = x+10, y =12)
 {  //这里隐式建立了一个围困 expr 的语句块。
console.log(x+y);// 27
}
console.log(x + y); // 5

用 var 或 let 声明的未赋初值的变量,值会被设定为 undefined

let和var三大区分:
- let声明的变量只在它地点的代码块有用,而非var为函数作用域
- let不会变量声明提早,未声明前运用,直接报错,var不会报错undefined
- let回暂时性死区,一旦区块内let声清楚明了a,全局变量a不会在该区块起
- let不允许在雷同作用域内,反复声明同一个变量
为何引进块级作用域?
- 防备内层变量能够掩盖外层变量
- for轮回的i变量掌握轮回,防备泄漏
    
块级作用域
- 运用{}替代马上实行匿名函数(IIFE)
- ES5的严厉形式划定,函数只能在顶层作用域和函数内声明,其他状况(比方if代码块、轮回代码块)的声明都邑报错。
- ES6因为引入了块级作用域,这类状况能够明白成函数在块级作用域内声明,因而不报错,然则组成区块的大括号不能少,不然照样会报错。
const

const 声明建立一个只读的常量。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。声明同时必需赋值。

- 声明一个只读的常量。一旦声明,常量的值就不能转变,这意味着,const一旦声明变量,就必需马上初始化,不能留到今后赋值。
- const的作用域与let敕令雷同:
    只在声明地点的块级作用域内有用
    const敕令声明的常量也是不提拔
    一样存在暂时性死区,只能在声明的位置背面运用
    一样不可反复声明
- 关于复合范例的变量(比方对象、数组),变量名不指向数据,而是指向数据地点的地点。
    const敕令只是保证变量名指向的地点稳定,并不保证该地点的数据稳定,所以将一个对象声明为常量必需异常警惕。
    假如真的想将对象凝结,应当运用Object.freeze要领,地点数据也不会变了
    
变量声明
- ES6:var/function/let/const/import/class
- ES5:var/function
全局对象的属性
- var敕令和function敕令声明的全局变量,依旧是全局对象的属性
- let敕令、const敕令、class敕令声明的全局变量,不属于全局对象的属性,eg:`let b = 1; window.b 为undefined`

book url:http://es6.ruanyifeng.com/#do…

    原文作者:Siyi厶弋
    原文地址: https://segmentfault.com/a/1190000005115282
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞