Javascript(笔记32) - ES6
ECMA
European Computer Manufactureres Association ,中文名:欧洲计算机制造商协会,目标是评估、开发和认可电信和计算机标准。1994年后改名为 ECMA国际;
就理解为“标准化”组织吧。
ECMAScript
就是这个组织通过 ECMA-262 标准化的脚本程序设计语言;
ES6是相对于 ECMA2015 年的版本,而且每年都要搞一个。
TC39是推进 ECMAScript 发展的委员会,会员都是浏览器厂商,苹果、谷歌、微软、因特尔这些,定期开会;
为啥学ES6
老一代的经典版本,不能满足要求了,新一代的版本中以 ES6 最为代表性。
后面还有 ES7、8、9、10、11 每年都有个新版本,只是标准都提前制定了,各浏览器厂商要支持新的版本,还需要时间;大部分浏览器对ES6都有很好的兼容;
兼容性: https://kangax.github.io/compat-table/es6/
我现在用的是 chrome 107,已经全面支持ES6。
let变量声明
变量声明:一个也行,多个也行,各种数据类型都行;
let a;
let b,c,d;
let f = 123, g = 'iloveyou',h =[];
特性1:变量不能重复声明:重复声明就报错;
let name = 'Jack';
let name = 'Tom';
语法错误:标识符 name 已经被声明了;
var 可以重复声明,但也会污染变量,不演示了,都懂;
特性2:块级作用域:全局,函数,eval
{
let girl = 'xiaowu';
// console.log(girl); 在块级作用域里可以用;
}
console.log(girl);
引用错误:girl 未定义;
var 就可以正确读取,因为 var 没有块级作用域,属于 window 了,所以可以用;
注意:if else 和 for 里面的 {} 也都是块级作用域;
特性3:不存在变量提升
console.log(song);
let song = "孤勇者";
// console.log(song); 声明后使用;
引用错误:初始化之前,不让用;
var 有变量提升,不报错,会输出 undefined ;
var song
console.log(song); // undefined
song = "孤勇者";
console.log(song); // 孤勇者
特性4:不影响作用域链
{
let name = "Jack";
function fn(){
console.log(name);
}
fn(); // Jack
}
fn 函数里没有 name ,会向作用域链上级找,这里是正常输出;
练习:
<style>
div {
display: inline-block;
margin: 0 4px;
width: 100px;
height: 50px;
border: 2px solid #CAE5E6;
}
</style>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<script>
// 获取 div 元素
let item = document.getElementsByClassName('item');
for (let i = 0; i < item.length; i++) {
item[i].onclick = function () {
// 修改当前元素的背景颜色
item[i].style.backgroundColor = 'pink';
console.log(i); // 1 控制台返回当前块级作用域 i 值;
}
}
</script>
var 没有块级作用域,在循环结束后 i = 3 了,如果 i 用 var 声明,这里会报错,都懂;