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,总体来说掌握得还行,知识点较多,得多记。

上周的周考,暴露出许多问题,晚上的时间我做了一部分的梳理。

标签

评论

this is is footer