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