ES6,var let const

163 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

1、 var,变量声明标志符,声明提升

let,块级变量声明标识符,超出作用域自动销毁

const,常量声明标识符,值不可修改

2、var 、 let

在{ } 中声明变量自动产生一个块作用域,使用var声明变量会提升至全局变量,使用let声明变量则会声明块级变量,超出{ } 则自动销毁。

注1:function fn(){ } 这样会生成函数作用域,内部变量超出范围都会销毁

注2:for(var i =0; i < 3; i++){ } 此处声明的变量作用域取决于标识符,如此声明全局变量

注3:使用let声明的变量非全window对象下的变量。在ES6环境下可通过global对象调用

3、let

同一作用域内,相同的变量不能以任何标识符多次声明。

  var a = 2;
  if( true ){
    console.log( a ); // ReferenceError
    let a;
  }

使用let声明变量会绑定作用域,声明变量之前使用都是错误的。如上,在全局下声明了变量a,当在{ }内使用let声明变量时就会绑定当前域,声明前使用都是错误的;

4、外层代码块不受内层代码块的影响

function f1(){
  let n =5;
  if( true ) {
    let n = 10;
  }
  console.log( n ); // 5
}

如果使用var声明变量,最后输出的值都是10;

注:let声明的变量不会泄露,for(var i = 0; ; ;){} 变量i会在循环结束后泄露为全局变量

5、常量const

var a = 2;
const a = 3; // Error 需定义的常量不能被已定义

const A = 3;
var A = 2; // Error 常量值不可更改

const B; // Error 常量定以后应立即赋值,之后不可更改

const C = [];
C.push('Hello world'); // 常量指向地址,当值为数组\对象,可对值进行操作
C = [ ]; // Error 常量数组\对象可更改值,但其本身不可重定义

用于定义在程序运行时不可修改的变量