js基本---3

完成promise

const PENDING = 'pending'
const RESOLVED = 'resolved'
const REJECTED = 'rejected'
function MyPromise(fn){
 const that = this
  that.state = PENDING
  that.value = null
  that.resolvedCallbacks = []
  that.rejectedCallbacks = [] 
  function resolve(value) {
    if(that.state === PENDING) {
      that.state = RESOLVED
      that.value = value
      that.resolvedCallbacks.map(cb => cb(that.value))
    }
  }    
  function reject(value) {
    if(that.state === PENDING){
      that.state = REJECTED
      that.value = value;
      that.rejectedCallbacks.map(cb => cb(that.value));
    }
  }
  try {
    fn(resolve, reject)
  } catch (e) {
    reject(e)
  }
}    
MyPromise.prototype.then = function(onFulfilled, onRejected) {
  const that = this
  //对传入的两个参数做推断,假如不是函数将其转为函数
  onFulfilled = 
    typeof onFulfilled === 'function'
    ? onFulfilled 
    : v => v  // onFulfilled = v => v
  onRejected = 
    typeof onRejected === 'function'
    ? onRejected
    : r => {
      throw r
    }
  if(that.state === PENDING) {
    that.resolvedCallbacks.push(onFulfilled)
    that.rejectedCallbacks.push(onRejected)
  }
  else if(that.state === RESOLVED) {
    onFulfilled(that.value)
  }
  else {
    onRejected(that.value)
  }
}
new MyPromise((resolve, reject) => {
  setTimeout(() => {
    resolve('胜利的回调数据')
  }, 1000)
}).then(value => {
  console.log('Promise.then:  ', value)
})

大数相加

1.末端加上末端,假如大于即是10,发生进位。假如没有进位就是0.2.倒数第二位加上倒数第二位,再加上进位,假如大于即是10,发生进位。3.倒数第三位加上倒数第三位,再加上进位,假如大于即是10,发生进位。。。。直到加完数字小的位数。第一轮回完毕,举行第二轮回。第二轮回是指,数字较小(或许长度较短)的数字已加完完毕了。剩下的就是第一轮回加完后,剩下的进位与剩下的相加。

//bigNumberA和bigNumberB运用字符串存储,否则会自动转化为科学计数
let bigNumberAdd = (bigNumberA, bigNumberB) => {
    let A  = (bigNumberA + '').split('');
    let B = (bigNumberB + '').split('');
    let aLen = A.length, bLen = B.length, cLen = Math.max(aLen, bLen) + 1;
    let result = [], prefix = 0;
    for (let i = 0; i< cLen -1; i++ ) {
        let a = aLen - i - 1 >= 0 ? parseInt(A[aLen - i - 1]) : 0, b = bLen - i - 1 >= 0 ? parseInt(B[bLen - i - 1]) : 0;
    result[i] = (a + b + prefix) % 10;
        prefix = Math.floor((a + b + prefix) / 10);
    }
    return result.reverse().join('');
};
bigNumberAdd('45486646468484544661134868968','544545867466464646');

纯js写一个动画,5s由快到慢,速率自定义

animation ease

完成一个三角形

.triangle{
width:0;
height:0;
border-left:50px solid transparent;
border-right:50px solid transparent;
border-buttom:100px solid yellow;
}

快排是怎样完成的

冒泡排序?

手写二分查找

手写求一个字符串中涌现次数最多且长度最长的子串

反转链表

var reverseList=function(head){
if(head===null||head.next===null){
return head;
}
var new_head=reverseList(head.next);
head.next.next=head;
head.next=null;
return new_head;
};

图片懒加载怎么做?

防抖

函数防抖就是在函数须要频仍触发的情况下,只要充足的余暇时刻,才实行一次。
典范运用

  • 百度搜刮框在输入稍有停马上才更新引荐热词。
  • 拖拽

    function debounce(handler, delay){
     delay = delay || 300;
     var timer = null;
     return function(){
       var _self = this,
           _args = arguments;    
       clearTimeout(timer);
       timer = setTimeout(function(){
         handler.apply(_self, _args);
       }, delay);
     }
    
    
    }
    

撙节

一个函数只要在大于实行周期时才实行,周期内调用不实行。彷佛水滴积累到肯定水平才会触发一次着落一样。
典范运用:

  • 抢券时猖獗点击,既要限定次数,又要保证先点先发出要求
  • 窗口调解
  • 页面转动

    function throttle(handler, wait){

     wait = wait || 300;
     var lastTime = 0;
     return function(){
       var _self = this,
       _args = arguments;
       var nowTime = new Date().getTime();
       if((nowTime - lastTime) > wait){
         handler.apply(_self, _args);
         lastTime = nowTime;
       }
     }
     }
    

js中最大整数是多少?

9开首

数组扁平化是指将一个多维数组变成一维数组

[1, [2, 3, [4, 5]]] ——> [1, 2, 3, 4, 5]
递归法:

function flatten(arr) {
  let res = [];
  arr.map(item => {
    if(Array.isArray(item)) {
      res = res.concat(flatten(item))
    } else {
      res.push(item);
    }
  })
  return res;
}

js怎样存储一个数据?

cookie,session,localStorage,sessionStorage

正则表达式

nginx的合适做什么,反向代办,正向代办

http 中假如想要运用缓存须要设置哪些字段

Expires、Cache-Control、(强缓存)
Last-Modified、Etag。(协商缓存)

哪些数组会返回一个新的数组

map、filter、concat、slice

剖析302、303、304、404、400状况码

对称加密和非对称加密有哪些区分?又有哪些运用

websocket 怎样传输文件

WebSocket发送图片时刻,我发起是举行图片紧缩,最好把图片紧缩在100K之内。
websocket发送大文件的时刻,经由我的测试,假如客户端衔接的服务器端的量比较大,分段发送,然后保存到数据库。

你用node平常做什么?(包装数据,转发要求)

react怎样优化

react的diff算法

历程与线程

历程是操纵系统资源分派的基本单位,而线程是使命调理和实行的基本单位。
个顺序至少有一个历程,一个历程至少有一个线程。

    原文作者:Ashleysweetie
    原文地址: https://segmentfault.com/a/1190000019357894
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞