
web前端
ICQ1206
这个作者很懒,什么都没留下…
展开
-
前端面试(一)
1.了解过react 或 angular 吗Vue借鉴了react的虚拟dom技术和react的组件化 借鉴了angular的数据绑定技术和模板Vue:渐进式的js框架,核心库加插件(如Vue-router)特点:MVVM模式,M:model,V:view, VM:viewmodelViewModel能够观察到数据的变化,并对视图对应的内容进行更新...原创 2022-03-10 10:57:52 · 744 阅读 · 0 评论 -
JS基础知识(一)
1.必须传参的函数function test(x = x) {return x}如果不传参,括号里面的x就是没定义,会报没定义的错2.对象的valueOf函数当你这么玩的时候:1 + { valueOf() {return 1} } 此时右边这个对象会调用valueOf方法进行数字转换所以答案是23.forEach 如果数组的某个元素为空他会跳过那次循环 比如var i = 0[1,2, ,4].forEach((item, index) => {i++}) // 34.原创 2022-03-09 19:23:36 · 200 阅读 · 0 评论 -
设计模式(二)
策略模式定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换(算法被封装在一个策略类的内部方法里,在用户对环境类请求时,环境类将请求交给对应的策略对象去计算)在策略模式中,创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。假设现在有个游戏在卖武器。武器分为多个级别,比如青铜,黑铁,白银,黄金等假设你接手了这个游戏的武器售卖业务,现在要开发一个售卖系统,其中一个功能就是根据武器底价和武器级别计算价格 于是你写下了如下代原创 2022-03-05 21:37:54 · 2703 阅读 · 0 评论 -
Javascript引擎运行机制
搞清楚JS是怎么跑起来的,很多问题将迎刃而解。进程:CPU分配资源的最小单位线程:CPU调度资源的最小单位一个应用程序可能包含多个进程,当一个应用程序被启动时,一个进程就被创建了,操作系统会为它分配内存。这个进程还可能向操作系统申请另一个进程。两个进程使用进程间通信方式通信。而且,假如其中一个进程挂了,而其他进程还在正常工作时,它又会重启。一个进程可以拥有多个线程,它们各自完成自己的任务。为什么要说这个,因为浏览器一般都是多进程的。而为什么要讲浏览器,因为它是一个js的运行时环境。先说浏览器。以原创 2022-03-05 14:45:35 · 501 阅读 · 0 评论 -
JS this指向问题
1.函数的this指向是谁调用就指向谁全局下的函数(window)function test(){ var s = 's' console.log(this.s)}test() // undefined因为此时 test()等价于 window.test() 所以this指向了window window.s自然是undefined对象的函数var o = { test: function() { console.log(this.s) }, s: 's'}o.test()原创 2022-03-05 01:13:32 · 102 阅读 · 0 评论 -
JS 作用域和作用域链、执行栈和执行上下文的关系
执行上下文的生命周期包括三个阶段:创建阶段→执行阶段→回收阶段。执行上下文它分为:1.全局上下文。打开浏览器,你就已经将全局上下文压进了执行栈。所以全局上下文永远位于执行栈的栈底,只有当你关闭浏览器,他才会出栈2.函数上下文。当执行一个函数时,进入了创建阶段:1.创建变量对象:首先初始化函数的参数arguments,提升函数声明和变量声明。2.创建作用域链3.确定this指向其中第2步创建了作用域链。作用域链的目的,就是让当前上下文能够访问到执行栈中在它下面的其他上下文,如全局上下文。作用域原创 2022-03-05 00:27:10 · 231 阅读 · 0 评论 -
前端算法(一)
数组常见方法:concat() 连接两个或多个数组 并返回结果let arr1 = [1,2];let arr2 = [1,2];arr1.concat(arr2);every() 对数组的每一项运行给定函数 如果该函数对于每一项都返回true,则返回true 否则 falselet names = ['abc', 'cd','ac']; // 可以通过every() 判断数组每一项是否包含某个字符 let flag = names.every(function (t) { ret原创 2022-03-03 20:21:57 · 99 阅读 · 0 评论 -
手写promise(二)
onFulfilled 和 onRejected 必须作为函数调用then() 也许会在同一个promise中调用多次 - 当promise变为完成态,所有相关的onFulfilled回调都被执行,且是按照回调函数注册的顺序执行 - 当promise变为拒绝态,所有相关的onRejected回调都按注册顺序执行then必须返回一个promise: promise2 = promise1.then(onFulfilled, onRejected) - 如果 onFulfilled 或者 onReje原创 2022-03-03 17:31:45 · 171 阅读 · 0 评论 -
手写promise(一)
Promise为JS的异步编程提供了一种解决方法JS异步编程的方式还有:1.发布订阅模式2.回调函数3.事件监听先看下回调函数怎么实现异步编程回调函数:函数当作参数进行传递, 当满足一定条件时,这个函数被执行回调函数并不会马上被执行。它会在包含它的函数内的某个特定时间点被“回调”(就像它的名字一样)模拟请求数据,当拿到数据后,打印出来这里的回调就是打印function showData(data) { console.log(data)}function getData(cb) {原创 2022-03-02 20:16:02 · 181 阅读 · 0 评论 -
手写浅拷贝和深拷贝
引用类型的名存储在栈内存中,值存在堆内存中 栈内存的名存储着堆内存的地址 var a = {name: 'hello'}var b = a // b拿到的是对象a的堆内存地址console.log(a.name) // hellob.name = 'hi'console.log(a.name) // hi浅拷贝:对象B拷贝对象A,对象A改变,对象B跟着改变浅拷贝的方式:1.上面提到的 var b = a 是一种这种方式是彻底的浅拷贝2. for in 循环 浅拷贝这种方式的浅拷贝原创 2022-03-02 13:02:10 · 158 阅读 · 0 评论 -
JS 内存泄漏
什么是内存泄漏已经没有使用的内存没有被及时释放 导致该段内存无法使用内存泄漏的原因无法通过js访问该段内存,且垃圾回收机制以为该段内存还在使用常用的垃圾回收机制引用计数法var obj = {}计数: {obj: 1}var obj1 = obj计数: {obj: 2}obj = 1计数: {obj: 1}obj1 = 2计数: {obj: 0}垃圾回收机制 清除该对象var arr = [1,2,3]arr = null // 释放内存浏览器端内存是否泄漏的方法打开开原创 2022-03-01 23:00:07 · 106 阅读 · 0 评论 -
js 继承方式(一)
js 继承 分为 原型继承、组合继承、寄生组合继承、es6的extend---------------------------------------------------原型继承1.父类的实例作为子类的原型2.缺点:子类的实例对象共享了父类的构造函数的引用属性function Person() { this.name = "tom" this.money = { consume: 100, deposit: 10000 }}function Student() { thi原创 2022-03-01 22:21:14 · 92 阅读 · 0 评论 -
JS节流和防抖
-----------------------------------------------------为按钮绑定操作var btns = []for(var i = 0; i < 3; i++) { btns[i] = function() {console.log(i)} }console.log(btns[0]()) // 3// 闭包var btns = []for(var i = 0; i < 3; i++) { // 立刻执行 返回函数 i的值被闭包了 b原创 2022-03-01 20:33:35 · 135 阅读 · 0 评论 -
JS new操作符
手写 newfunction mynew(fn) { var obj = {} obj.__proto__ = fn.prototype var args = Array.from(arguments).slice(1) console.log(args) var res = fn.call(obj, ...args) return res instanceof Object ? res : obj // res == null 或者 undefined 则返回obj}// 测试func原创 2022-03-01 18:30:32 · 149 阅读 · 0 评论 -
手写call和apply
------------------------------------------------------------------------手写call 先看下call的使用,通过 call()方法可以使用另一个对象的方法var person = { //sayhello: () => { console.log('hello', this.name) } sayhello: function() { console.log('hello', this.name) }}var p1原创 2022-03-01 17:34:43 · 219 阅读 · 0 评论 -
搞清楚 prototype __proto__ new的关系
搞清楚prototype __proto__ 和 new 的关系原创 2022-03-01 13:09:10 · 131 阅读 · 0 评论 -
前端面试(一)
1.数据类型有基本数据类型,特点较为简单,所以存储在栈里,有:Number, String, null, undefined, bool, Symbol还有引用数据类型,比较复杂,所以放在堆里,但为了能找到,还需在栈里存放它的地址。有:Function,Object, Array, Date, 正则表达式栈内存自动释放,堆内存则不会,依靠垃圾回收机制回收,如果不用,最好将使用完的对象设为null2.闭包假设有两个函数,F1, F2 F1中包含F2, F1里面还有个变量dog,这个变量被F2原创 2021-09-11 11:22:41 · 806 阅读 · 0 评论 -
复习下js的零碎知识点
prototype属性****************************************************************var x = 1;console.log(this.x); // 1 全局的console.log(window.x); // 1****************************************************************基本类型:string number boolean null undefined b原创 2020-06-23 12:13:40 · 117 阅读 · 0 评论