目录
1.声明
1.1.let和var
let | var |
---|---|
变量不能重复声明 | 可以 |
具有块级作用域 | 没有 |
不存在变量提升 | 存在 |
不影响作用域链 | 也不影响 |
块级作用域: 变量只在代码块内有效,出代码块就无效(读取不到) {} / if / else / while / for等
不影响作用域链:
{
let star = 'yyqx';
function fn() {
console.log(star);
//作用域链:fn里没有star 继续向上找 找到大括号里声明的star
}
fn();
}
var和let关于块级作用域的区别的案例
let items = document.getElementsByClassName('item');
for (var i = 0; i < items.length; i++) {
console.log(i); // 打印出 0 1 2
items[i].onclick = function() {
console.log(i);
// 只能用
this.style.background = 'pink';
// items[i].style.background = 'pink'; 这个就不好使
}
}
// var声明的i没有块级作用域, 其一直是在全局中存在的
而let声明的i有块级作用域
for (let i = 0; i < items.length; i++) {
items[i].onclick = function() {
// this.style.background = 'pink';
items[i].style.background = 'pink';
}
}
1.2.const
const定义常量:值不能修改的量称为常量
- const声明常量时一定要赋初始值
const A; // 会报错
必须 const A = 100; - 一般常量的值使用大写(潜规则)
- 常量的值不能修改
const A = 100;
A = 200;//fault - 块级作用域
- 对于数组和对象的元素修改,不会报错。(注意是修改元素,而不是修改整个数组) 因为这样只改变了数组/对象里的元素,但这个数组/对象指的地址没有改变
可:
不可:
1.3.变量的解构赋值
ES6允许按照一定模式从数组和对象中提取值,对变量进行赋值。这被称为解构赋值
1.数组解构
const F3 = ['易烊千玺', '刘宪华', '鞠婧祎'];
let [yyqx, lxh, jjy] = F3;
console.log(yyqx);
//输出易烊千玺
2.对象解构
const yi = {
name: '易烊千玺',
age: 20,
jiewu: function() {
console.log