ES6简介
ES6是什么
ECMAScript是什么
ECMA
具体是什么
ECMAScript的历史版本
ECMAScript的命名方式
ECMAScript与JavaScript的关系
ES6的兼容性
let和const
let和const是什么
// 1.let 和 const 是什么 // 声明变量或声明常量 // var 声明变量 // let 代替 var,声明变量 // const 声明常量 constant // 2.let 和 const 的用法 // var 一样 var username = 'Alex'; let age = 18; const sex = 'male'; console.log(username, age, sex); // 3.什么是变量,什么是常量 username = 'ZS'; age = 28; console.log(username, age); // 报错 sex = 'female'; // var、let声明的就是变量,变量一旦初始化之后,还可以重新赋值 // const 声明的就是常量,常量一旦初始化,就不能重新赋值了,否则就会报错
const
为什么需要const
// let // let sex = 'male'; // // ... // sex = 'female'; // console.log(sex); // const // const sex = 'male'; // // ... // sex = 'female'; // console.log(sex); // const 就是为了那些一旦初始化就不希望重新赋值的情况设计的
const的注意事项
// 2.1.使用 const 声明常量,一旦声明,就必须立即初始化,不能留到以后赋值 // const sex; // sex='male' // const sex = 'male'; // 2.2.const 声明的常量,允许在不重新赋值的情况下修改它的值 // 基本数据类型 // const sex = 'male'; // sex = 'female'; // 引用数据类型 // const person = { username: 'Alex' }; // // person = {}; // person.username = 'ZhangSan'; // console.log(person);
什么时候用const,什么时候用let
// var // for (let i = 0; i < 3; i++) {} // const username = 'Alex'; // // ... // username = 'ZhangSan';
let、const与var的区别
重复声明
// 已经存在的变量或常量,又声明了一遍 // var 允许重复声明,let、const 不允许 // let a = 1; // // ... // let a = 2; // console.log(a); // function func(a) { // let a = 1; // } // func();
变量提升
// var 会提升变量的声明到当前作用域的顶部 // console.log(a); // console.log(a); // var a = 1; // 相当于 // var a; // console.log(a); // a = 1; // console.log(a); // let、const 不存在变量提升 // console.log(a); // let a = 1; // 养成良好的编程习惯,对于所有的变量或常量,做到先声明,后使用
暂时性死区
// 只要作用域内存在 let、const,它们所声明的变量或常量就自动“绑定”这个区域,不再受到外部作用域的影响 // let、const 存在暂时性死区 // let a = 2; // let b = 1; // function func() { // console.log(b); // // console.log(a); // // let a = 1; // } // func(); // 养成良好的编程习惯,对于所有的变量或常量,做到先声明,后使用
window对象的属性和方法(全局作用域中)
// 全局作用域中,var 声明的变量,通过 function 声明的函数,会自动变成 window 对象的属性或方法 // let、const 不会 // var/function // var age = 18; // function add() {} // console.log(window.age); // console.log(window.add === add); // let/const // let age = 18; // const add = function () {}; // console.log(window.age); // console.log(window.add === add);
块级作用域
什么是块级作用域
// var 没有块级作用域 // for (var i = 0; i < 3; i++) { // // console.log(i); // } // console.log(i); // let/const 有块级作用域 // for (let i = 0; i < 3; i++) { // // i = i+1 // // console.log(i); // } // console.log(i);
作用域链
// function func() { // for (let i = 0; i < 3; i++) { // // console.log(i); // } // } // func(); // console.log(i); // 作用域链:内层作用域->外层作用域->...->全局作用域
有哪些块级作用域
// {} // { // let age = 18; // // console.log(age); // } // console.log(age); // {} // for(){} // while(){} // do{}while() // if(){} // switch(){} // function(){} // const person = { // getAge: function () {} // };
作用域分块级、函数、全局作用域
let和const的应用
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>let 和 const 的应用</title> <style> body { padding: 50px 0 0 150px; } .btn { width: 100px; height: 100px; margin-right: 20px; font-size: 80px; cursor: pointer; } </style> </head> <body> <button class="btn">0</button> <button class="btn">1</button> <button class="btn">2</button> <script> // 1.var // var btns = document.querySelectorAll('.btn'); // for (var i = 0; i < btns.length; i++) { // btns[i].addEventListener( // 'click', // function () { // console.log(i); // }, // false // ); // } // 2.闭包 // var btns = document.querySelectorAll('.btn'); // for (var i = 0; i < btns.length; i++) { // (function (index) { // btns[index].addEventListener( // 'click', // function () { // console.log(index); // }, // false // ); // })(i); // } // 3.let/const let btns = document.querySelectorAll('.btn'); for (let i = 0; i < btns.length; i++) { btns[i].addEventListener( 'click', function () { console.log(i); }, false ); } </script> </body></html>