js
妙莲
这个作者很懒,什么都没留下…
展开
-
原生js获取路径带的参数
原生js获取路径带的参数第一种方法function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)","i"); var r = window.location.search.substr(1).match(reg); if (r!=null) return unescape(r[2]); return null; }第二种方法原创 2021-08-02 15:57:11 · 582 阅读 · 0 评论 -
javascript 介绍下promise的特性、优缺点,内部是如何实现的,动手实现Promise
Promise基本特性1)Promise有三种状态: pending(进行中)、fulfilled(已成功)、rejected(已失败)2)Promise对象接受一个回调函数作为参数,该回调函数接受两个参数,分别是成功时的回调resolve和失败的时候回调reject,另外resove的参数除了正常值以外,还可能是一个Promise对象的实例;reject的参通常是一个Error对象的实例3)then方法返回一个新的Promise实例,并接收两个参数onResolved(fulfilled状态的回调.原创 2021-06-02 10:11:04 · 1060 阅读 · 1 评论 -
javascript 说一下事件循环机制(node、浏览器)
一、为什么会有Event LoopJavaScript 的任务分为两种同步和异步,它们的处理方式也各自不同,同步任务是直接放在主线程上排队依次执行,异步任务会入任务队列中,若有多个异步任务则需要在任务队列中排队等待,任务队列类似于缓冲区,任务下一步会被移到调用栈然后主线程执行调用栈的任务。调用栈:调用栈是一个栈结构,函数调用会形成一个栈帧,帧中包含了当前执行函数的参数和局部变量等上下文信息,函数执行完后,它的执行上下文会从栈中弹出。Javascript 是单线程的,单线程是指js引擎中解析和执行js代原创 2021-05-31 17:44:18 · 290 阅读 · 2 评论 -
javascript 类数组和数组的区别,dom的类数组如何转换成数组
定义数组是一个特殊对象,与常规对象的区别:a. 当由新元素添加到列表中时,自动更新length属性b. 设置length属性,可以截断数组c. 从Array.protoype中继承了方法d. 属性为’Array’类数组是一个拥有length属性,并且他属性为非负整数的普通对象,类数组不能直接调用数组方法。区别本质:类数组是简单对象,它的原型关系与数组不同let arrayLike = { length: 10,}console.log(arrayLike instanceof A.原创 2021-05-31 15:42:44 · 532 阅读 · 1 评论 -
javascript面试-实现链式调用
链式调用的核心就在于调用完的方法将自身实例返回。1)示例一function Class1(){ console.log('初始化')}Class1.prototype.method = function(param){ console.log(param) return this}let c1 = new Class1()c.method('第一次调用').method('第二次调用')2)示例二var obj = { a: function(){ console.log('原创 2021-05-27 11:38:12 · 240 阅读 · 0 评论 -
javascript面试-实现add(1)(2)(3)
考点:函数柯里化函数柯里化概念:柯里化是把接受多个参数的函数转变为接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术1)粗暴版function add (a) { return function (b){ return function (c) { return a+b+c; } }}console.log(add(1)(2)(3))2)柯里化解决方案a.参数长度固定const curry = (fn)=>( judge = (..args)=原创 2021-05-27 11:13:09 · 3394 阅读 · 1 评论 -
javascript面试-实现lodash的\_.get
在js中经常会出现嵌套调用这种情况,如a.b.c.d.e,但是这么写很容易抛出异常,你需要这么写 a&&a.b&&a.b.c&&a.b.c.d&&a.b.c.d.e但是显得有些啰嗦与冗长了。特别是在graphql中,这种嵌套调用更是难以避免。这里就需要一个get函数,使用get(a, ‘b.c.d.e’)简单清晰,并且容错性提高了很多。代码实现function get(source, path, defaultValue=undefi原创 2021-05-27 10:41:08 · 293 阅读 · 0 评论 -
javascript面试-闭包原理以及应用场景
什么是闭包函数执行后返回结果是一个内部函数,并被外部变量所引用,如果内部函数持有被执行函数作用域的变量,即形成了闭包。可以在内部函数访问到外部函数作用域。使用闭包,一可以读取函数中的变量,二可以将函数中的变量存储在内存中,保护变量不被污染。而正因闭包会把函数中的变量值存储在内存中,会对内存有消耗,所以不能滥用闭包,否则会影响网页性能,造成内存泄漏。当不需要使用闭包时,要及时释放内存,可将内层函数对象的变量赋值为null闭包原理函数执行分成两个阶段(预编译阶段和执行阶段)。a. 在预编译阶段,如果.原创 2021-05-26 10:15:26 · 314 阅读 · 0 评论 -
javascript面试-介绍防抖节流原理、区别以及应用,并用javascript进行实现
防抖原理:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。适用场景:a. 按钮提交场景:防止多次提交按钮,只执行最后提交的一次b. 搜索框联想场景:防止搜索发送请求,只发送最后一次输入简易版实现:function debounce( func, wait ) { let timeout; return function() { const context = this; const args = arguments; clearTimeout(timeout.原创 2021-05-25 15:36:27 · 118 阅读 · 0 评论 -
javascript event loop 事件循环机制 面试例子
宏任务包括:setTimeout,setInterval,setImmediate(node独有),requestAnimationFrame(浏览器独有),UI rendering(浏览器独有),I/O,微任务:process.nextTick(node独有,在微任务中是最先执行的),Promise.then(),Object.observe,MutationObserver注意:Promise构造函数里的代码是同步执行的一个函数执行栈,一个事件队列,一个微任务队列宏任务队列一原创 2021-04-02 15:57:43 · 216 阅读 · 0 评论