ES6入门---let和const

let和const均为ES6中声明变量的方法,用法相似于var,可是其所声明的变量,只在let命令所在的代码块内有效
<!-- more -->git

没有变量提高

其所声明的变量,必须先声明再使用,若先使用,后声明则会报错github

暂时性死区

即在存在let的块级做用域,造成了一个封闭的环境,在这其中,若先使用后声明则仍旧会报错浏览器

以下:ide

{
  console.log(temp);//暂时性死区,会报错
  let temp //死区结束
}

有些隐蔽的死区以下:函数

function foo(x=y,y=2){
  return [x,y]
}
foo() //报错

该报错是由于在y尚未声明的时候就使用了(将y赋值给x),此时就会报错指针

不能重复声明

在同一个做用域中,不能重复声明同一个变量code

function a(){
  let a = 5;
  var a = 5;
}
function b(){
  let a = 5;
  let a = 5;
}

这二者都会报错对象

块级做用域

let和const实际上提供了一种块级做用域
ES6容许块级做用域随意嵌套
外层做用域没法读取内层做用域的变量,内层做用域的变量可覆盖外层做用域的变量ip

在块级做用域中声明函数

function f() { console.log('I am outside!'); }

(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log('I am inside!'); }
  }

  f();
}());

ES6中,理论上该函数运行会获得I am outside,由于外层的做用域没法访问内层变量,但内层做用域的变量可访问外层变量.
在因为兼容性问题,在浏览器中,块级做用域声明的函数,行为相似于var声明的变量内存

note:考虑到兼容性问题,应该避免在块级做用域中声明函数,或者声明时利用函数表达式的形式声明:

// 函数声明语句
{
  let a = 'secret';
  function f() {
    return a;
  }
}
// 函数表达式
{
  let a = 'secret';
  let f = function () {
    return a;
  };
}

note: ES6 的块级做用域容许声明函数的规则,只在使用大括号的状况下成立,若是没有使用大括号,就会报错

const

const声明的变量即常量,即声明后没法改变该变量的值,因此const声明变量时候必须进行初始化,若不声明,则会报错
const与let相似:只在声明所在的块级做用域内有效,不存在变量提高,一样存在暂时性死区,只能在声明的位置后边使用

const的声明变量的值不变是针对于变量指向的内存地址不变,
对于值类型的变量类型来讲,则值不能变,
但对于引用类型的变量类型来讲,则该变量所指向的内存地址不变,即指向对象的指针不变,但对象的内容是能够变的,

const foo = {};

// 为 foo 添加一个属性,能够成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另外一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only
const foo = {};

// 为 foo 添加一个属性,能够成功
foo.prop = 123;
foo.prop // 123

// 将 foo 指向另外一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only

ES6声明变量的六种方法
var function let const import class

欢迎访问个人博客了解更多

相关文章
相关标签/搜索