let 变量声明
1 2 3 4 5
| let a; let b, c, d, e; let k = 555; let t = "init"; let y = [];
|
let 不可重复声明
1 2
| let a = 100; let a = 200;
|
块级作用域
1 2 3 4
| { let name = "name"; } console.log(name);
|
没有变量提升
1 2 3 4 5
| console.log(tag); var tag = "name"; ---------------------------; console.log(tag); let tag = "name";
|
不影响作用域链
1 2 3 4 5 6 7
| { let name = "doc"; function fn() { console.log(name); } fn(); }
|
html1 2 3 4 5 6
| <div class="container"> <h2 class="page-header">点击切换颜色</h2> <div class="demo1"></div> <div class="demo1"></div> <div class="demo1"></div> </div>
|
javascript1 2 3 4 5 6 7 8 9
| let items = document.getElementsByClassName('demo1'); for(let i = 0 ; i<items.length ; i++){ items[i].onclick = function() { items[i].style.background = 'pink'; } }
|
css1 2 3 4 5 6 7
| .demo1 { width: 100px; height: 50px; border: solid 1px rgb(42, 156, 156); float: left; margin-right: 10px; }
|
若使用 var i=0;变量会被提升为全局变量,每次点击执行回调函数时,都会执行 items[3].style.background = ‘pink’;所以会出现问题。而使用 let 时 i 会作为回调函数内的一个元素,而不会被提升为全局变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var i; i=3; { items[i].style.background = "pink"; } ----------------------------------------------------------- { let i=0; items[i].style.background = "pink"; } { let i=1; items[i].style.background = "pink"; } { let i=2; items[i].style.background = "pink"; }
|
const 声明常量
const NORMAL = "常量";
const 声明必须有初始值。
一般使用大写。
常量值不能修改。
块级作用域。
对数组与对象的修改不算对常量的修改。
1 2 3
| const nums = [1, 2, 3, 4, 5, 6]; num.push(6); num = 10;
|
变量解构赋值
ES6 允许按照一定模式从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。
数组的解构
1 2
| const nums = [1, 2, 3, 4]; let [a, b, c, d] = nums;
|
对象的解构
1 2 3 4 5 6 7 8 9
| const people = { name: "zhangsan"; age: 18; ability: function(){ console.log("ok"); } } let {name,age,ability} = people; ability();
|
模板字符串
声明
内容中可以直接出现换行符
1 2 3 4 5
| let str = `多 行 子 符 串`;
|
变量拼接
1 2
| let str1 = "字符串"; let sout = `${str1}<-这是拼接进来的字符串`;
|
简化对象写法
1 2 3 4 5 6 7 8 9 10 11
| let name = "tname",age = "18"; const people={ name, age, improve(){ console.log("a"); } } }
|
箭头函数
1 2 3 4
| let fn = (a, b) => { return a + b; }; fn(1, 2);
|
this 是静态的,this 始终指向**函数声明**时所在作用域下的 this 的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function getName(){ console.log(this.name); } let getName2 = () =>{ console.log(this.name); } window.name="name1"; const s = { name = "name2"; } getName(); getName2();
getName.call(s); getName2.call(s);
|
不能作为构造实例化对象
1 2 3 4
| let Person = (name, age) => { this.name = name; this.age = age; };
|
不能使用 arguments 变量
1 2 3 4
| let fn = () => { console.log(arguments); }; fn(1, 2, 3);
|
箭头函数的简写
i. 当形参有且只有一个时可省略小括号。
1 2 3 4 5 6 7
| let add = (n) => { return n++; };
let add = (n) => { return n++; };
|
ii.当代码体只有一条时可省略花括号,且return也应一并省去。
1 2 3 4 5
| let p = (n) => { return n++; };
let p = (n) => n++;
|
箭头函数实例
javascript1 2 3 4 5 6 7 8 9 10 11 12
| let de = document.getElementById('demo2'); de.addEventListener("click", function(){ setTimeout(() => { this.style.background = 'pink'; }, 2000); });
|
css1 2 3 4 5
| #demo2 { width: 200px; height: 200px; background: #58a; }
|
1 2 3 4 5 6 7 8 9 10
| const a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const res = a.filter(function (i) { if (i % 2 === 0) { return true; } else { return false; } });
const res = a.filter((i) => i % 2 === 0);
|
箭头函数适合做与 this 无关的回调,如定时器与数组方法回调。