1.判断obect是否为数组:之前的博客有写
判断object对象是否是数组
2.用纯css实现三角形:
要点:让元素的内容去为0,使三角形的两条边无线的接近
哪个边的方向想实现三角形就设置成真实的颜色,其他的设置为透明色,不要设置为白色,因为白色在有背景颜色时会显示出来。
3.transform:translateZ(0)的作用:强制硬件加速的一项技术
自己也不知道,经过查资料后的理解:
浏览器中用css开启硬件加速,使GPU (Graphics Processing Unit) 发挥功能,从而提升性能.
现在大多数电脑的显卡都支持硬件加速。鉴于此,我们可以发挥GPU的力量,从而使我们的 站或应用表现的更为流畅。
CSS animations, transforms 以及 transitions 不会自动开启GPU加速,而是由浏览器的缓慢的软件渲染引擎来执行。那我们怎样才可以切换到GPU模式呢,很多浏览器提供了某些触发的CSS规则。
现在,像Chrome, FireFox, Safari, IE9+和最新版本的Opera都支持硬件加速,当它们检测到页面中某个DOM元素应用了某些CSS规则时就会开启,最显著的特征的元素的3D变换。
可是在一些情况下,我们并不需要对元素应用3D变换的效果,那怎么办呢时候我们可以使用个小技巧“欺骗”浏览器来开启硬件加速。
虽然我们可能不想对元素应用3D变换,可我们一样可以开启3D引擎。例如我们可以用transform: translateZ(0); 来开启硬件加速 。
原生的移动端应用(Native mobile applications)总是可以很好的运用GPU,这是为什么它比 页应用(Web apps)表现更好的原因。硬件加速在移动端尤其有用,因为它可以有效的减少资源的利用,但是使用GPU有可能会导致严重的性能问题,因为它增加了内存的使用,而且它会减少移动端设备的电池寿命,所以要小心使用这些方法。
参考文献
4.什么是同源策略,为什么会有这样的策略,本地开发时如何解决接口跨域的问题br> 还没学到这个层次,后面再恶补,先贡上链接。
参考文献1
参考文献2
参考文献3
5.问打印的输出顺序/p>
预备知识:
因为我们(粗浅地)知道await之后的语句会等await表达式中的函数执行完得到结果后,才会继续执行。
MDN是这样描述await的:
async 函数中可能会有 await 表达式,这会使 async 函数暂停执行,等待表达式中的 Promise 解析完成后继续执行 async 函数并返回解决结果。
阮一峰老师的解释更容易理解:
async 函数返回一个 Promise 对象,当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。
所以,MDN描述的暂停执行,实际上是让出了线程(跳出async函数体)然后继续执行后面的脚本的。
async表达式的返回值
async function 声明将定义一个返回 AsyncFunction 对象的异步函数。
当调用一个 async 函数时,会返回一个 Promise 对象。当这个 async 函数返回一个值时,Promise 的 resolve 方法会负责传递这个值;当 async 函数抛出异常时,Promise 的 reject 方法也会传递这个异常值。
所以你现在知道咯,使用 async 定义的函数,当它被调用时,它返回的其实是一个Promise对象。
await表达式的作用和返回值
语法:[return_value] = await expression;
表达式(express):一个 Promise 对象或者任何要等待的值。
返回值(return_value):返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
所以,当await操作符后面的表达式是一个Promise的时候,它的返回值,实际上就是Promise的回调函数resolve的参数。
另外Promise是一个立即执行函数,但是他的成功(或失败:reject)的回调函数resolve却是一个异步执行的回调。当执行到resolve()时,这个任务会被放入到回调队列中,等待调用栈有空闲时事件循环再来取走它。
该代码执行的流程:
1.console.log(‘script start’)输出:script start
2.setTimeout异步调用,被放在宏队列中等待最后调用
3执行async1函数,输出async1 start,因为async 表达式定义的函数也是立即执行的。然后执行到 await async2(),发现 async2 也是个 async 定义的函数,所以直接执行了“console.log(‘async2’)”,同时async2返回了一个Promise,划重点:此时返回的Promise会被放入到回调队列中等待,await会让出线程,接下来就会跳出 async1函数 继续往下执行。
4.然后执行到 new Promise,前面说过了promise是立即执行的,所以先打印出来“promise1”,然后执行到 resolve 的时候,resolve这个任务就被放到回调队列中等待,然后跳出Promise继续往下执行,输出“script end”。
同步的事件都循环执行完了,调用栈现在已经空出来了,那么事件循环就会去回调队列里面取任务继续放到调用栈里面了。
5.这时候取到的第一个任务,就是前面 async1 放进去的Promise,执行Promise时发现又遇到了他的真命天子resolve函数,**划重点:**这个resolve又会被放入任务队列继续等待,然后再次跳出 async1函数 继续下一个任务。
6.接下来取到的下一个任务,就是前面 new Promise 放进去的 resolve回调 啦 yohoo~这个resolve被放到调用栈执行,并输出“promise2”,然后继续取下一个任务。
7.此时调用栈再次空出来了,事件循环就取到了下一个任务:历经千辛万苦终于轮到的那个Promise的resolve回调!!!执行它(啥也不会打印的,因为 async2 并没有return东西,所以这个resolve的参数是undefined),此时 await 定义的这个 Promise 已经执行完并且返回了结果,所以可以继续往下执行 async1函数 后面的任务了,那就是“console.log(‘async1 end’)”。
参考文献1
参考文献2
6.数组对象根据对象中指定的属性去重/p>
思想:遍历数组中的每一项,用map哈希结构去判断属性是否重复,在hash结构中,属性当作key,数组对象当作value.
数组遍历可以使用forEach代替,对数组的每一项运行传入的函数,没有返回之后,本质上和for迭代数组一样。
7.实现一个DOM2JSON函数,可以把一个DOM节点输出JSON的格式br> 上找的正确的答案
8.实现一个搜索框,边输入边自动搜索,搜索结果通过ajax请求获得,搜索结果实时渲染。
用户频繁的请求对服务器的压力,该如何优化/p>
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!