js基础---3

分析狂
• 阅读 1261

实现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;
};

图片懒加载怎么做?

防抖

函数防抖就是在函数需要频繁触发的情况下,只有足够的空闲时间,才执行一次。
触发高频事件后n秒后汉书只会执行一次,如果n秒内再次被触发,则重新计算时间。
典型应用

  • 百度搜索框在输入稍有停顿时才更新推荐热词。
  • 拖拽

    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

对称加密和非对称加密有哪些区别?又有哪些应用

websocket 如何传输文件

WebSocket发送图片时候,我建议是进行图片压缩,最好把图片压缩在100K以内。
websocket发送大文件的时候,经过我的测试,如果客户端连接的服务器端的量比较大,分段发送,然后保存到数据库。

你用node一般做什么?(包装数据,转发请求)

react如何优化

react的diff算法

进程与线程

进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。
个程序至少有一个进程,一个进程至少有一个线程。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
分析狂
分析狂
Lv1
我已经闭好一只眼睛了,就等你说晚安闭另外一只
文章
3
粉丝
0
获赞
0