es6阮一峰 let 和const
2017-10-22 本文已影响41人
SmallTwo
- babel可以进行代码的转换
- a 会报错 b不会 用let修饰的变量只在代码块内起作用
用var修饰会将变量提前
{
let a = 10;
var b = 20;
}
console.log(a);
console.log(b);
function test2() {
// 用let修饰只在代码块内所以结果会是报错的
for(var i=0;i<10;i++){
}
console.log(i);
}
test2();
结果是6如果用var修饰是10
function test3() {
var a = [];
for(let i =0;i<10;i++){
a[i] = function(){
console.log(i);
}
}
a[6]();
}
test3();
不存在变量的提升
function test4() {
console.log(b);
var b = 10;
console.log(a);
let a= 10;
}
test4();
暂时性死区 变量在代码块内如果用let const修饰那么即使有全局的变量也不允许提前进行使用
function test5() {
var a= 10;
function test() {
a = 20;
console.log(a);
let a = 1;
}
test();
}
不允许重复声明
function test6(arg) {
let arg = 10;
}
test6()
const 修饰的是常量无法修改而且必需在定义的时候进行初始化
function test8() {
const a = 10;
a = 20;
const b;
}
const 修改的仅仅是指针不能修改如果const修饰的变量指的是一个对象类型那么对象的属性等是可以进行修改的
function test9() {
const a = {
"username" : 'liuxiaoer',
'age':20
};
a.username = 20;
}
如果想真的让指向的对象无法修改可以使用Object.freeze();
const b = Object.freeze({'username':20});
b.username = 10;
console.log(b);
如果对象的属性也是一个对象
var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key, i) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};
全局对象属性 es6有6创建变量的方法 es5有var和function es6为了兼容规定全局变量被var 或funtion的是默认是global的属性其他的不是
function test11() {
let a = 10;
console.log(global.a);
}
阮一峰的博客 let 和const http://es6.ruanyifeng.com/#docs/let