讲一讲this的指向问题?
- 全局变量的this是指向window的 setTimeout,setInterval的this也指向window
- 箭头函数的this指向它的上文 ES6中this为undefined
- 事件函数的this指向调用该事件的事件源
- 对象的this指向当前对象
- 使用apply,call可以改变this的指向
- bind可以new一个新的对象出来指向this
- 也可以用var that=this 更改this的指向
async和await、promise的区别?这两个的本质?
async和await是promise的语法糖,promise其实一个容器 里面有异步数据处理的结果,promis返回的是一个对象
promise中 提供了两个函数
- resolve pending到成功 -----具体执行在then中
- reject pending到失败状态 ----在catch中执行
- 这样可以将回调函数变为链式结构 解决回调地狱的问题
async和await 是对promise的优化
可以将异步代码写的和同步代码一样
promise
- promise可以将then中的promise的then放在外面操作
- 也就是说 如果then中返回一个promise对象 这个返回的promise的then可以跟在外面的then后面,形成链式结构
- promise解决回调地狱
- 但是这一串链式不可分割 还是有一定缺陷
async await
-
es7提供了一个回调地狱的终极解决方案
-
async用来修饰函数 代表这是一个异步处理 加在整个函数前面
-
await 后面跟着promise对象 修饰promise对象
-
//假如赋值给一个变量 可以返回promise执行的结果 var res= await new Promise(function(resolve,seject){ Ajax({ url:"cityID.php", data:{ name:"南宁区" }, methods:"post", success:function(res){ resolve(res) }, }) console.log(res) }) var res1= 后面和上面一个 这样就没有嵌套了
解释一下柯里化函数,能不能一个demo?
谈谈js中的变量提升?
ES5中使用var定义变量的时候回存在变量提升 浏览器在解析js的时候分为两步
一步是创建变量 初始化变量等 第二步才是赋值调用函数开始渲染
这个时候就是变量提升
用过Service worker吗?用来干嘛?
- 如何降低一个页面的网络请求成本从而缩短页面加载资源的时间并降低用户可感知的延时是非常重要的一部分。
- 对于提升应用的加载速度常用的手段有Http Cache、异步加载、304缓存、文件压缩、CDN、CSS Sprite、开启GZIP等等。
- 这些手段无非是在做一件事情,就是让资源更快速的下载到浏览器端。但是除了这些方法,其实还有更加强大的Service Worker线程。
- 用Service Worker做一做PC浏览器的缓存了