欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6入门---let和const

程序员文章站 2023-12-22 13:17:28
...

let和const均为ES6中声明变量的方法,用法类似于var,但是其所声明的变量,只在let命令所在的代码块内有效

没有变量提升

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

暂时性死区

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

如下:

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

有些隐蔽的死区如下:

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

该报错是因为在y还没有声明的时候就使用了(将y赋值给x),此时就会报错

不能重复声明

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

function a(){
  let a = 5;
  var a = 5;
}
function b(){
  let a = 5;
  let a = 5;
}
复制代码

这两者都会报错

块级作用域

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

在块级作用域中声明函数

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

欢迎访问我的博客了解更多

上一篇:

下一篇: