1.在移动端中,直接使用focus是的input获取焦点会有问题,建议使用autofocus+click事件,另外iOS中异步事件中使用click或者focus完全无效
2.防止页面被键盘挤压,提前将页面高度设死
3.闭包三种解决方案
//利用setTimeout的第三个参数
for(var i = 0; i <= 5; i++){
setTimeout(function timer(j){
console.log(j)
}, 1000, i)
}
//普通闭包
for(var i = 0; i <= 5; i++){
(function(j){
setTimeout(function timer(){
console.log(j)
}, 1000)
}(i))
}
//利用let定义变量
for(let i = 0; i <= 5; i++){
setTimeout(function timer(){
console.log(i)
}, 1000)
}
4.操作元素的class
(1)可以直接使用dom.className来获取该元素的class,得到的是个字符串,你可以对这个字符串进行拼接。
<div class="a b"></div>
div.className => "a b"
div.className+=" c"//添加类c,注意这里开头有空格,不然会变成<div class="a bc"></div>
(2)使用classList属性
如图,dom.classList得到的是个DOMTokenList对象,类似数组但不是数组。他有如下方法
具有对象的方法(keys),并且是个可迭代对象(forEach, entries)。
添加add,删除remove,查找contains,等等
5.base的使用
base64弊端
根据 base64 的编码原理,大小比原文件大小大 1/3尽管图片请求少了,但是 HTML 文件本身尺寸会变大,会影响首屏加载,所以要权衡代码看起来会有点丑,大量编码字符(当然也可以通过构建工具动态插入)base64 无法缓存,要缓存只能缓存包含 base64 的文件,比如 HTML 或者 CSS,这相比直接缓存图片要弱很多,一般 HTM 会改动频繁,所以等同于得不到缓存效益
优势
减少 HTTP 请求,适合小尺寸的图片。
6.判断一个函数是否为async函数
Object.prototype.toString.call(fn);如果输出"[object AsyncFunction]"那就是async函数,否则是普通函数
7.关于setTimeout异步理解
setTimeout是把要执行的内容延迟执行,js是单线程,所以它在执行的过程中,如果有异步操作那么就会把这个操作放到一个事件队列中,不会去等待,而它自己就不断的进行事件循环,等到异步完成了,就会执行异步中的内容,当然到底是不是在下一次eventloop中就不好说了,但是一般来说js执行都很快的。在node中setTimeout设置时间为0,其实内部回设置为1。