zoukankan      html  css  js  c++  java
  • js高级面试题

    1. 01.+0.2!=0.3  二进制浮点数转十进制        实际=0.3000 000 000 0004
      1. 解决办法:parseFloat((0.1+0.2).toFixed(10));
    1. 10个AJAX同时给hi发送请求至多允许三次失败:
      1. Promise.all(),但是失败一次就返回了,不行。
      2. Ajax(url,(res)=>{if(success){successIndex++}else{errprCount++;if(errorCount>3{}}});
      3. Let p =new Promise((resolve,reject)=>{if(success){resolve(res.data)}else{errorCount++;if(errorCount>3{})}});
    2. localstorge设计一个1M的缓存系统,需要实现缓存淘汰机制:
      1. 每个存储对象添加1个属性:存储时间;
      2. 判断所有存储属性大小>1M按照时间排序,删除多余的老的时间存储对象;
    3. 详细说明 Event  loop事件循环

    js是门非阻塞单线程语言;如果是多线程处理DOM就会发生冲突;

    1. JS在执行的而过程中会产生执行环境,这些执行环境会被顺序的加入到执行栈中。如果遇到异步的代码,会被挂起并加入到task队列(多种task)中。一旦执行栈为空,Even loop会在task队列中拿出需要执行的代码并放入执行栈中执行,所以本质上来说js中的异步还是同步行为。
    2. Console.log('start'); 
                settimeout(function(){console.log('settimeout')},0);
                console.log('end');
                //start    end      settimeout
                settimeout函数虽然为0,但是h5规定第二个参数不得小于4毫秒,不足会自动增加;所以.
    1. 不同的任务源会被分配到不同的Task队列中,任务远可以分为:微任务microtask=jobs,宏任务macrotask;
                Console.log('start'); 
                settimeout(function(){console.log('settimeout')},0);
                new promise((resolve)=>{console.log('promise1') resolve()})
                      .then(function(){console.log('promise2')})
                           .then(function(){console.log('promise3')})
                console.log('end');
                //start   promise1 end  promise2       promise3  settimeout因为promise属于微任务,settimeout属于宏任务;
      1. 微任务:promise  process.nextTick   object.observe
      2. 宏任务:settomeout   setinterval  script I/o 
      3. 微任务一定快于宏任务?错!
                    因为宏任务中包含 script浏览器会先执行一个宏任务,接下来有异步代码的话就先执行微任务:
        1.   
        2. 执行同步代码,属于宏任务;
        3.   
        4. 执行栈为空,查询是否有微任务需要执行
        5.   
        6. 执行所有微任务;
        7.   
        8. 必要的渲染UI;
        9.   
        10. 开始新一轮  Event loop;

    如果宏任务中异步代码有大量的计算并且需要操作DOM,可以把操作DOM放入微任务中。

     

    1. js原始数据类型:
      1. 原始(基本)类型:Number  null         boolean   undefined  string +symbol(es6)  +BigInt(es10);
      2. 复杂数据类型:object
      3. null是对象码?不是,虽然typeof null==‘object’,但是不是对象,历史遗留问题:
                    最初版本使用的是32系统,为了性能考虑地低位存储变量的类型信息,000开头表示对象,null表示全为0,所以将他错误的判断为对像。
      4. 基本与复杂区别:
        1.   
        2. 内存分配不同;
        3.   
               
          1. 基本:栈
          2.    
          3. 复杂:堆,栈存储的是其 引用地址;
          4.   
            
        4. 访问机制不同;
        5.   
               
          1. 基本:安值访问;
          2.    
          3. 复杂:引用访问;
          4.   
            
        6. 复制变量不同;
        7.   
               
          1. 基本:a=b完全独立,互不影响;
          2.    
          3. 复杂:a=b;a.age=20;b.age//20;一个值改变,另一个也会改变;
          4.   
            
        8. 函数参数传递不同
        9.   
               
          1. 基本:拷贝栈中的值,修改互不影响;
          2.    
          3. 复杂:拷贝是引用地址,修改互相影响
          4.   
    2. HTML5语义化理解:
      1. 简单  清晰  易读,便于维护;
      2. 方便设备解析;
      3. 利于搜索引擎优化;
  • 相关阅读:
    WebBrowser,挖坑,跳坑,填坑
    Random类取随机数小测试
    request.path 值危险
    文件上传
    gitbook serve后报错::Error: ENOENT: no such file or directory……/_book/gitbook/gitbook
    iOS 报错 Undefined symbol: _BZ2_bzDecompressEnd
    iOS operator delete(void*) 和 operator new(unsigned long)的报错解决办法
    [!] CDN: trunk Repo update failed
    iphone手机系统回退、降级
    iphone手机型号获取
  • 原文地址:https://www.cnblogs.com/yancongyang/p/11170067.html
Copyright © 2011-2022 走看看