经过了几个月对前端的学习,觉得成效不大,那就给学习做点记录吧,从ES6开始。
学习一门技术网络上的文档很多,推荐一本学习文档用于学习参考,给出链接https://es6.ruanyifeng.com/。
- 变量的声明方式
相较于传统js中的var,es6中新加了一种新的变量声明方式let,相较于var它有四种显著的特性
- let:
①不存在变量提升②不允许重复声明③暂时性死区④块级作用域 之前我们学过的var声明的变量都是全局的,如果直接写变量名不定义也会按照var定义来解析算作全局变量,而let是局部作用域,这里的作用域可以理解为{}中的内容为一个作用域,在作用于外调用,变量不存在会报错,这就是因为块作用域的原因. 这个个例子举得很好,需要细细体会一下,另外js有自己的存储机制,所以在let定义失效后,for循环中后台自动会把记录的i保存,这样就说得通了为什么i在块作用域外还可以使用
1 var a = []; 2 for (var i = 0; i < 10; i++) { 3 a[i] = function () { 4 console.log(i); 5 }; 6 } 7 a[6]();//10
1 var a = []; 2 for (let i = 0; i < 10; i++) { 3 a[i] = function () { 4 console.log(i); 5 }; 6 } 7 a[6]();//6
- const:声明一个只读变量,一但声明变量不能改变,const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
-
变量的解构赋值
从数组和对象中提取值,对变量进行赋值,这被称为解构
①数组解构
let arr = ["hello","world","good"]; let a = arr[0];//hello let b = arr[1];//word let c = arr[2];//good let [a,b]=["hello","world","good"];//hello word underfine let [a,[b,c],d] = [1,[2,3],4];//1 2 3 4
②对象解构
let obj = { name:"abc", age:20 } let name = obj.name;//abc let age = obj.age;//20 let {age:b,name:a}={name:"abc",age:20};//20 abc 与位置无关变量名相对应
③字符串解构
let str = "hello"; let [a,b,c] = "hello"; console.log(a,b,c);//h e l console.log(str[0]);//h console.log(str.charAt(0));//h
④应用:函数参数的解构赋值\函数返回值\变量互换\Json应用
function foo({name,age}){ console.log(name,age); } let obj = { name:"abc", age:20 } foo(obj)//abc 20
不引入第三个变量实现数值的互换
//方案一 var [a,b]=[b,a]; //方案二 var a = [b,b=a][0];