ES6入门-let和const指令

LET:

基本用法:在javascript中声明一个变量通常使用var ,在es6中新增了let指令,用法类似var ,但是let声明的变量只能在所在的代码块有效。

⚠️  使用let声明变量要注意一下几个点:

1,let指令不存在变量提升,所以变量一定要先声明后再使用,否则就会报错。

console.info(info);   //ReferenceError
let info;

2, 存在暂时性死区,也就是说,只要一个块级作用域中使用let声明了某个变量,那么这个变量就被绑定在这个区块了。外界对它是影响不到的。

var  info = 123;

if(true){
    info = "abc"; //ReferenceError
    let info;  
}

  以上这段代码中存在全局变量info 但是在区块中又使用let声明了一个info变量,所以这个变量info就被绑定在块级作用域中,所以会报错。(😖  疑问:为什么全局变量不用let来声明?是因为let声明语句是不能重复声明一个变量??)

3, 不允许重复声明,let指令不允许在相同的作用域内重复声明一个变量

//报错
function(){
    let aa = 10;
    var aa = 3;
}


//报错
function(){
    let aa = 10;
    let aa = 3;
}


// 也不能在一个函数内部重新声明参数
function(arg){
    let arg = 10;
}

 CONST:

const 用来声明常量。⚠️一旦声明便不可改变其值。

一,与let的共同点:

1,只能在声明所在的块级作用域没有效

2,只能在声明后使用

3,const指令声明的常量也不可提升,同样存在暂时性死区,只能在声明后使用

4,不可重复声明常量

 

tips1 : 如果想设置跨模块常量可以使用一下写法:

// constants.js

export const a = 1;
export const b = 2;
export const c = 3;

// test1.js

import * as constants from './constants';
console.info(constants.a);  // 1
console.info(constants.b);  // 2
console.info(constants.c);  // 3



//test2.js

import {a, b} from './constants';
console.info(a);  // 1
console.info(b);  // 2

 

全局对象的属性

全局对象是最顶层的对象,在浏览器环境指的是window对象,在nide.js中指的是global对象,在es5中,全局对象的属性与变量是等价的。 如下:全局对象属性赋值和全局变量的赋值是一件事。

window.a = 1;   // a=1

a = 2; //a = 2

如上规定,很容易不自觉的创建了全局变量,ess6为了改变这一点,一方面规定,var命令和function命令声明的全局变量依旧是全局对象的属性,另一方面规定,let、const、和class命令声明的全局变量不属于全局对象的属性。

var a = 2;
window.a; // 2

let b = 3;
window.b;  //undefined

 

二,在es5和es6中的声明命令

es5:var  function

es6 : var  function  let  const  class

 

posted @ 2017-07-30 12:58  liaoali  阅读(370)  评论(0编辑  收藏  举报