es6 学习笔记(let 、const)
1、 let 命令:用来声明一个变量,和 var 相似
2、const 命令 : 用来声明一个常量,常量就是不可以变化的量
用 let 声明变量的注意事项 :
1、 用 let 声明的变量,只在变量声明的代码块内有效
{ let a = 1; var b = 2; console.log(a); // 1 } console.log(b); // 2 console.log(a); // a is not defined
2、用 let 声明的变量,在域解析的时候不会提前
console.log(a); var a = 3; // undefined console.log(b); // Uncaught ReferenceError: b is not defined let b = 5;
typeof c; let c = 10; // c is not defined
let f = 10; function fn() { f = 7; let f = 2; } fn(); // Uncaught ReferenceError: f is not defined
3、let 不允许在同一个作用域下声明已经存在的变量
var a = 10; let a; // Uncaught SyntaxError: Identifier 'a' has already been declared
let b = 10; let b = 6; // Uncaught SyntaxError: Identifier 'b' has already been declared
var btns = document.querySelectorAll("button"); for(var i = 0; i < btns.length; i++){ btns[i].onclick = function () { console.log(i); // 点击左右按钮都是 5 } }
方法一 : 采用立即执行函数
var btns = document.querySelectorAll("button"); for(var i = 0; i < btns.length; i++){ (function (i) { btns[i].onclick = function () { console.log(i); } })(i)
}
方法二:
var btns = document.querySelectorAll("button"); for(var i = 0; i < btns.length; i++){ btns[i].index = i; btns[i].onclick = function () { console.log(this.index); } }
方法三 : 使用 let 来声明变量 ,在循环语句之内是一个父作用域,在循环体之中是一个子作用域
var btns = document.querySelectorAll("button"); for(let i = 0; i < btns.length; i++){ btns[i].onclick = function () { console.log(i); } }
const
1、const 声明的常量只在其所在的代码块内有效
2、const 声明的常量不会被提升
3、const 命令不能声明已经被声明的常量或者变量
4、const 声明常量的时候必须要赋值
5、const 声明的常量存储的是简单的数据类型时不可改变其值,如果储存的是对象,那么引用不可以被改变,至于对象里面的数据是否变化,则没有关系
const a = 6; a = {}; // Uncaught TypeError: Assignment to constant variable.
const obj = { a : 10 }; obj.a = 20; console.log(obj.a); // 20