js(面试题)

732 阅读2分钟

image.png

1.js作用域

image.png

image.png

image.png

2. js闭包

闭包可以将变量一直保存在内存中(内部的函数被保存到外部,即b函数保存到了外部,res可以访问到) image.png a函数可以访问b函数的AO,当a函数被销毁的时候,下方的res重新定义了函数,也可以访问a函数中的AO image.png

image.png

image.png

3. js防抖和结流(考的是js闭包)

image.png

3.1 防抖

esc:进度条 点击一次直接执行到100%结束,但是如果在进度条进度在70%没有到100%的时候,点击按钮,此时进度调重新定时器开始计时

image.png 防抖函数(模糊搜索功能即输入完毕才访问接口 假设输入2000,输出值是2001,2002,2003这些是在输入200的时候就调用了接口)

<input type='text' id='input'>

 function debounce(fun,delay){
     let timer;
     clearInterval(timer);
     //闭包
     return function(args){
         timer= setTimeout(function(){
            fun(args)  
         },delay)
     } 
 }
 
 function inputFn(value){
     console.log('你输入的值${value}')
 }
 const input= document.getElementById('input')
 const debounceInput = debounce(inputFn,1000)
 input.addEventListener('keyUp',function(e){
     debounceInput(e.target.value)
 })
 

3.2 结流

image.png

   <button id='button'>点击</button> 
   
   function throttle(fun,wait){
      let timerOut
      return function(){
          if(!timerOut){
      //缓存 这样写会一直返回是undefind
            timerOut = setTimeout(function(){
               timerOut = null  //即工作做完了告诉他们一声 然后接待新顾客
                  fun()
              },wait)
          }   
      }
   }
   function handle(){
       console.log(Math.random())
   }
   document.getElementById('button').onclick = throttle(handle,2000)
   

4.事件流的应用

image.png

5.js的深浅拷贝

一般数据类型:number string boolean undefined null symbol(es 6新增)

引用数据类型:object、Array、function

基本数据类型相互独立,引用数据类型互相影响

image.png

image.png

5.1浅拷贝和赋值的区别

image.png

5.1 赋值

image.png

person和person1 输出是一样的,都是赋值,都是输出hobby的内容

5.2 浅拷贝

image.png

image.png

5.3 深拷贝

image.png

image.png

image.png

这个也是深拷贝,和递归深拷贝对比缺点是:

1.输入 正则表达式时 ('\w+')、2.new.Date(1536627600000)、3. function(){}

image.png

5.4 总结

image.png

image.png

6. call apply bind

image.png

image.png

image.png

image.png

7. 双向绑定

image.png image.png

手写一个发布订阅模式

image.png

image.png

8. vuex工作原理

image.png

9. vue-router

image.png

image.png

10. 懒加载

image.png 缺点:1.只要处罚lazyLoad函数 就会执行for循环;2.如果刚开始就滑动到图片底部,那么所有的图片都加载进来(所以上述方法需要被抛弃)

image.png vue的自定义指令实现

image.png

image.png image.png

10. this 面试题

image.png

image.png

10. 预编译 面试题

image.png

image.png

10. 数组去重 (es6 new Set())

javascript中常见的类数组有 arguments对象和 DOM方法的返回结果。比如 document.getElementsByTagName()

**类数组=>数组 **

1.args = Array.prototype.slice.call(arguments); [...arr]

image.png

10.js 隐氏转换(阿里面试题)valueOf join

Number类型会先调用valueOf(), String类型会先调用toString(), 如果结果是原始值,则返回原始值,否则继续用toString 或 valueOf(),继续计算,如果结果还不是原始值,则抛出一个类型错误;

image.png

image.png

image.png

10.html

image.png