20200921岳浩天
知识总结
let声明
禁止变量声明提前,保证程序按顺序执行代码。不会破坏程序正常的执行顺序
让程序结构(分支和循环)的{},也成为一级作用域——块级作用域,保证块内和块外即使有相同的变量,也不会相互影响,避免了块内的变量污染外部(使用let关键字声明的变量,只能在块级作用域下使用,不能被外部访问,不存在变量提升)
let会被自动翻译为匿名函数自调
双保险,let为了进一步避免可能的冲突将变量悄悄改了名字
let t=0; 会更改为 var _t=0;
let t=0;
自动添加匿名函数自调
(function(){
var _t=0;
...
})()
let的特点
全局写 let t=0, 用 window.t 却找不到
同一级作用域内,不能在 let t=0 前,提前使用t。即使外层作用域有t变量,也不行
相同作用域内,不允许重复let同一个变量
箭头函数的使用方法
去掉 function,在 () 和 {} 之间加 =>
如果只有一个参数,可省略 (),但是,如果没有参数,必须保留空 ()
如果函数体只有一句话,可省略 {},如果这句话还是 return,则可省略 return 和 {}
笔试题
是不是有了ES6,就不用ES5了?
要看浏览器是否兼容ES6。如果使用框架和微信开发,基本上可以使用最新的语法。因为框架中和微信开发中都自带翻译工具(Babel),在项目打包时,会将ES6代码翻译成ES5代码,保证浏览器兼容性。如果没使用框架,使用原生或jquery开发,则尽量不要使用ES6
for循环、for of、forEach三种遍历,哪种效率高?
一样高。其实只有一种遍历,就是for循环。其他的都是封装的for循环而已。所以,ES5的其他遍历函数 indexOf、every、some、forEach、 map、filter 和 reduce,都没有效率的提升,因为内部都是for循环而已,只是语法简单而已
...不是打散的意思吗?这里怎么成了收集?
定义函数时,形参列表中的...是收集不确定个数的实参值的意思。调用函数时,实参值列表中的...是打散数组实参为多个实参值,分别传入的意思
...作为打散数组放在实参列表中时,不一定放在结尾?
是的,可以和其他单独的实参值混搭
心得
今天学习了一部分es6,总体来说掌握得还行,知识点较多,得多记。
上周的周考,暴露出许多问题,晚上的时间我做了一部分的梳理。
近期评论