网站建设维护及使用管理办法,wordpress修复,长沙网站开发,网页程序开发1.如何理解this#xff1f;
this表示的是函数运行时自动生成的一个内部对象#xff0c;只能在函数内部使用#xff0c;总是指向调用它的对象。
this是在运行时进行绑定的#xff0c;并不是在编写的时候绑定#xff0c;它的上下文取决于函数调用时的各种条件。this的绑定…1.如何理解this
this表示的是函数运行时自动生成的一个内部对象只能在函数内部使用总是指向调用它的对象。
this是在运行时进行绑定的并不是在编写的时候绑定它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系只取决于函数的调用方式。
2.浏览器的多进程和javaScript的单线程
一个进程是由一个或者多个线程组成的线程是一个进程中代码的不同执行路线。一个进程的内存空间是共享的所有的线程都能够访问这些内存。打开一个tab页其实就是创建了一个进程一个进程可以有多个线程比如JS引擎线程、GUI渲染线程、HTTP请求线程、定时器触发线程、事件触发线程等。当发起一个请求的时候其实就是创建了一个线程。当请求结束时线程可能就会销毁。
JavaScript的单进程与它的用途有关作为浏览器的脚本语言javaScript主要是和用户互动以及操作DOM。如果有两个线程同时操作DOM的话。会带来很复杂的同步问题。
3.事件循环
事件循环的异步队列有两种一种是宏任务一种是微任务。宏任务队列可以有多个微任务队列只有一个。
所有的同步任务都在主线程上执行形成“执行栈”。首先主线程会去执行所有的同步任务等所有的同步任务执行完会查看任务队列里面的异步任务。如果满足条件那么就重新进入主线程开始执行这时它就变成了同步任务。等它执行完后下一个异步任务会进入到主线程开始执行。直到所有的任务执行结束。
第一次事件循环中js引擎会把整个script代码当成一个宏任务执行。执行完成之后会查看任务中是否存在微任务如果有微任务那么会依次从微任务的队列中将读取执行完所有的微任务。执行完微任务之后js引擎会继续查看宏任务队列中的任务依次执行。再执行微任务队列。如此循环。
4.hash路由和history路由
hash#是URL的锚点代表网页中的一个位置单是改变hash#后面的部分只会滚动到网页响应的位置并不会重新刷新页面。也就是说hash出现在URL中但不会被包含在http请求中。因此改变hash不会重新加载页面。同时每一次更改#后面的部分就会在浏览器的历史记录中添加一条数据使用浏览器的后退按钮就能返回到上一个位置。hash模式通过锚点值的改变根据不同的值渲染指定DOM位置的不同数据。
监听hash的改变通过》hashchange()
histoy模式利用了h5中history interface新增的pushState()和replaceState()提供了对浏览器记录栈修改的功能当它们执行修改时虽然会改变URL但是不会立即向后端发送请求。这种情况需要后台配置支持。我们的页面时SPA如果后台没有相应的配置用户直接访问其中一个页面的时候就会404。在服务端增加一个覆盖所有资源的默认情况。URL如果匹配不到相应的资源那么返回一个index.html页面。这个页面就是app依赖的页面。
5.深拷贝和浅拷贝的区别
浅拷贝是拷贝一层。属性为对象时那么浅拷贝是复制两个对象会指向同一个地址。
深拷贝是递归拷贝深层次属性为对象时深拷贝是新开栈两个对象指向的是不同地址。
如何实现浅拷贝
1Object.assign
2ES6的扩展运算符
3slice()
4concat()
如何实现深拷贝
1通过递归的方式实现
6.如何将类数组转换成数组
Array.from()
Array.apply(null, array)
Array.prototype.concat.apply([], array)
7.如何剪裁图片选择头像
https://q.shanyue.tech/fe/js/231.html
8.bind 与 call/apply 的区别是什么
他们都是绑定 this 的但是bind 返回函数call/apply 直接执行函数