美文网首页
let 和const

let 和const

作者: 小狮子_3e1e | 来源:发表于2017-04-16 15:57 被阅读0次

1.let

用法类似var,但是声明的变量只在代码块中有效

{    
      let a = 0;
      var b =1;
}
a //ReferenceError:a is not defined 
b //1

比如下面的案例:

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

会发现,输出的结果都是10,如果想输出每一次的i的值,可以使用IIFE,或者最简单的,把 var 改成 let

暂时性死区

只要块级作用于存在let声明的变量,那么这个变量就绑定了这个区域,不会在收到外部的影响

var a = 0;
if(true){
  a = 123; // referenceerror
  let a;
}
不允许重复声明
function(){
  let a=0;
  let/var a =1; //报错
}

2.块级作用域

为什么需要块级作用域

比如:

for(var i = 0;i<5;i++){
    ......
}
console.log(i); //5

变量i只想用来控制循环,但是循环结束后,i没消失,而泄露成了全局变量.

ES6的块级作用域

比如:

function(){
  let a =1;
  if(1){
      let a = 2;
  }
console.log(a) // 1
}

两个代码块都声明了变量a,但是外层代码块不受内层代码块的影响.

块级作用域与函数声明

ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。但是浏览器为了兼容以前的旧代码,支持在会计作用于之中声明函数,不会报错.

表现:在浏览器的 ES6 环境中,块级作用域内声明的函数,行为类似于var声明的变量。

const

const声明一个只读的常量,一旦声明,值就不能改变

const p=3.14;
p// 3.14 
p= 1 ;TypeError: Assignment to constant variable.

因为值无法改变,所以在声明的时候,就必须初始化,否则会报错

const p;  //SyntaxError: Missing initializer in const declaration

作用域与let相同,且与let一样不可重复声明

const本质

const本质是保证const声明的变量指向的地址不得改动.
比如:

const p = {}
p.a='a'
p= '123' //TypeError: "p" is read-only
other

letconst 都不存在变量提升,

顶层对象

顶层对象,浏览器中是window node中是global

window.a=1
a  //1

全局变量跟顶层对象的属性是等价的.但在es6中 var 和function 声明的依旧是顶层对象,但是let,const,class声明的全局变量,不在属于顶层对象.

相关文章

  • let和const

    新的赋值语句let和const let和const命令

  • 工作中常用的 ES6 语法

    变量声明 let 和const 不用var, 用const声明只读变量,let声明变量。let和const都是块级...

  • 关于ES6以及ES6常用的方法

    1、变量声明let和const let表示变量、const表示常量。let和const都是块级作用域。 2、模板字...

  • ES6需要记忆理解的地方

    let和const命令 1、let和const均无变量提升。2、let变量指向的地址可变,const指向的地址不可...

  • (JS)

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

  • ES6这些就够了

    1.变量声明const和let let表示变量、const表示常量。let和const都是块级作用域 2.模板字符...

  • 【JS】从ECMA学习let、const、var变量声明与声明提

    let、const、var是JS中的声明关键字 let和const 我们熟知的let和const的特性,常见的就有...

  • ES6编码风格

    http://es6.ruanyifeng.com/#docs/style let和const let和const...

  • 2018-09-13

    一、let和const const和let的异同点 相同点:const和let都是在当前块内有效,执行到块外会被销...

  • ES6(let 与 const)

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

网友评论

      本文标题:let 和const

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