资讯专栏INFORMATION COLUMN

js基础---3

王军 / 3270人阅读

摘要:倒数第三位加上倒数第三位,再加上进位,如果大于等于,产生进位。。。。第一循环结束,进行第二循环。第二循环是指,数字较小或者长度较短的数字已经加完结束了。拖拽节流一个函数只有在大于执行周期时才执行,周期内调用不执行。

实现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算法 进程与线程

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104316.html

相关文章

  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    madthumb 评论0 收藏0
  • 【重温基础】15.JS对象介绍

    摘要:构造函数通常首字母大写,用于区分普通函数。这种关系常被称为原型链,它解释了为何一个对象会拥有定义在其他对象中的属性和方法。中所有的对象,都有一个属性,指向实例对象的构造函数原型由于是个非标准属性,因此只有和两个浏览器支持,标准方法是。 从这篇文章开始,复习 MDN 中级教程 的内容了,在初级教程中,我和大家分享了一些比较简单基础的知识点,并放在我的 【Cute-JavaScript】系...

    booster 评论0 收藏0
  • JS】关于JS的一些知识点(JS基础,纯记录)

    摘要:如何让根据拆箱转换,以及的隐式转换,可以如下写为什么计算机中所有的数据都是以二进制存储的,所以在计算机计算时要把数据先转换成二进制进行计算,然后把计算结果转换成十进制。会存在精度丢失问题和的二进制都是以无线循环的小数的二进制的二进制 本想着记笔记里,但是笔记里没有分类,还是以文章的形式,当个人总结吧,这一篇就当作JS基础篇的记录吧,有修改的和新增的持续更新~ 关于JS的一些小技巧 1:...

    SwordFly 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    fxp 评论0 收藏0
  • 那些年,我的前端/Java后端书单

    摘要:全文为这些年,我曾阅读深入理解过或正在阅读学习即将阅读的一些优秀经典前端后端书籍。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 全文为这些年,我曾阅读、深入理解过(或正在阅读学习、即将阅读)的一些优秀经典前端/Java后端书籍。全文为纯原创,且将持续更新,未经许可,不得进行转载。当然,如果您喜欢这篇文章,可以动手点点赞或者收藏。 基础 基础书籍 进阶 进阶阶段,深入学习的书...

    Tecode 评论0 收藏0

发表评论

0条评论

王军

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<