美文网首页
[ES6] let and const

[ES6] let and const

作者: EmilioWeng | 来源:发表于2019-08-12 23:48 被阅读0次

let

ES6新增的let命令,用来声明变量,但是声明的变量只在声明所在的代码块中有用。

// let的块级作用域
function test(){
  for(let i = 0; i < 2; i++){
    console.log(i); //可以输出
  }
  console.log(i); //undefined
}

像for循环中的计数器,就非常适合使用let来定义

//var
var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

//let
var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

需要注意let不能重复声明变量,也不能在函数内部重新声明参数

//let不能重复定义
function demo(){
  let i = 0;
  let i = 1; //会报错,i重复定义了
}

function func(arg) {
  let arg;
}
func() // 报错

function func(arg) {
  {
    let arg;
  }
}
func() // 不报错

var在使用中存在有变量提升的现象,就是变量可以在声明前使用,为undefined,而let并不支持这种做法,如果在let声明前使用,会报错ReferenceError。

// var
console.log(a); // undefined
var a = 2;

// let
console.log(b); // 报错 ReferenceError
let b = 2;

暂时性死区
在块级作用域中使用let声明变量,被声明的变量就会绑定这个块级作用域,不再受到外部的影响。

var test = 123;
if (1<2) {
  test = 'test'; // ReferenceError 此时的test以及绑定了let声明的test,与外部无关
  let test;
}

const

// const
function getPi(){
  const PI = 3.1415926;
  console.log(PI); 

  PI = 8;//会报错,PI is read-only
  console.log(PI);
}
//const和let一样是存在块级作用域的
//const在声明时必须赋值
//const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。

需要注意的是,const在声明常量后是不能重新赋值的,但是const声明Object后,Object对于的内容是可变的。

function test(){
  const o = {
    a : 1
  }
  o.b = 2; //不会报错
  console.log(o);
}

因为Object是引用类型,对象最终的返回值是该对象在内存中的地址,也就是声明的o这个对象其实就是指向了内存中的地址,而这个地址是不可变的,但是对象本身是可变的。因此,将一个对象声明为常量必须非常小心。

相关文章

  • (JS)

    ES6 let、const和var的区别 let和const声明变量不存在变量提升 let和const不能重复声明...

  • es6,es7,es8语法总结

    ES6 1. var let const let,const具有块级作用域,不具有变量提升 const 用...

  • ES 6 7 8 随笔 QAQ

    ES6 1. var let const let,const具有块级作用域,不具有变量提升 const 用...

  • ES6(let 与 const)

    ES6中引入了let 和 const来声明变量,我们来看下let 和 const 的使用 一、let let定义的...

  • react 入门基础(一)之ES6

    ####ES6 let const var 三者的区别 ### 1. let const 不能重复声明变...

  • es6总结一

    es6基础 let和const命令 let和const用于声明变量let跟var的区别 1、let定义过的变量不能...

  • ES6之 let 和 const 命令

    ES6 之 let 和 const 命令 1、let 命令 1.1、基本用法 ES6 新增了let命令,用来声明变...

  • es6解读1: let, const 和 smybol

    let const 作用域 作用域概念 如何使用let和const 使用let 形成块级作用域 es6下强制开启...

  • es6常用语法

    const 和 let 在es6语法规范中,尽量使用let替代var,如果在const 和let中选,优先使用co...

  • 总结一下前端常见javascript基础面试题:

    1.var ,let 和const的区别: let和const是es6新增的语法, let和var都可以定义变量,...

网友评论

      本文标题:[ES6] let and const

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