let、const

一、ECMAScript 6javascript

javascript组成: ECMAScript、BOM、DOMjava

ES6指的是ECMAScript的版本,2015年6月正式经过数组

二、let命令数据结构

用法相似于var,可是所声明的变量只在let命令所在的代码块内有效函数

   var b = new Array()
   for (let i = 0; i < 3; i++) { b[i] = i } console.log(i)

报错:Uncaught ReferenceError: i is not definedspa

可是,换成var会正常输出 3指针

js做用域,不像其余大部分语言都是块做用域,它是函数做用域,只有函数里声明的变量才是局部变量,外部不能引用,而if、for等语句块中的变量,从声明开始直至销毁都是全局的。所以,有些地方使用var会以为有点“坑”,增长了let命令以后,至关于给js增长了块级做用域,能够避免code

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

//输出  6

上述代码中,i使用var声明的,而且是在语句块中,因此它是全局变量,每一次循环,变量的i值都会发生改变,而循环内的i指向的也是全局变量i,而执完循环体后,i的值为6,因此最后console.log(i)的输出也是6  对象

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

//输出3

上述代码惟一的区别就是,i使用let声明。因为i是在块内起做用,也就是本次的循环中有效,因此每一次循环都会开辟一个新的地址存放,而且,js引擎会记住上一次的值,初始化本轮的变量i时,就会使用上一次i的值。因此最终输出的是 3blog

let无变量提高,也就是必须先声明再使用,不然会报错。ES6规定,若是区块中存在let和const命令,这个区块对这些命令声明的变量从一开始就造成了封闭做用域。

let不容许在相同做用域内,重复声明同一个变量

三、const命令

const声明一个只读的常量。一旦声明,常量的值就不能改变。其本质是变量指向的地址不容许改动,针对数字、字符串、布尔值,值就保存在变量指向的内存地址,所以等同于常量,但对于复合类型的数据,主要是对象和数组,变量指向的内存地址是指针,其数据结构能够变。因此将对象或数组声明为const须要注意,其内容不必定是不变的。

const a;
a = 11;
console.log(a)
//输出报错 Uncaught SyntaxError: Missing initializer in const declaration

const常量,声明后必须赋值,而且对于简单的数据类型是不能够更改,但对于复杂数据类型,能够增减内容,可是不能改变地址

const a = 11;
a = 12;
console.log(a)
//Uncaught TypeError: Assignment to constant variable.

const b = {m:33}
b.n = 22
console.log(b)
// {m: 33, n: 22}

  const c = [1,2,3,4];
  let b = [1,2,3,4];
  c = b;
  console.log(c)

  // Uncaught TypeError: Assignment to constant variable.

相关文章
相关标签/搜索