随笔分类 - javascript
摘要:```js /** * 啥是发布订阅模式 * 举个栗子--场景: 充值成功 切换到个人中心页面刷新余额 切换到会员中心页面刷新会员状态等 */ // 定义一个对象 作为接收事件的载体 const eventBus = { topic: {}, // 这里为啥是个对象呢 首先肯定不止是一个事件,所以得
阅读全文
摘要:本文皆为简单实现,不涉及边界和优化问题 不涉及参数的简单实现 涉及参数的简单实现
阅读全文
摘要:1.一个普通的对象, 我们直接访问obj._name得到值aaa const obj = { _name: 'aaa' } 2.给这个对象添加get和set,会发现报错 Uncaught SyntaxError: Setter must have exactly one formal paramet
阅读全文
摘要:1.第一种解释: 计算机只识别0和1, 对象是 000xxxxx...开头的,前三位都是0,null代表空指针 为0000000...全是0,前三位也是0,所以会把null 识别为object 2.第二种解释: 深入浅出javascript说到:null代表不存在的对象,就像NaN是不存在的数字,所
阅读全文
摘要:大致分为几个阶段: 1.浏览器请求到html后,生成DOM树的同时,并行下载css,js,图片等资源 2.浏览器下载完所有的css文件后,生成css对象模型,生成完之后,与DOM树结合生成(渲染树)render tree 3.浏览器通过render tree计算得出每个节点在页面中的位置,然后进行页
阅读全文
摘要:浏览器缓存机制的目的 避免每次打开网站都要请求服务器获取静态资源文件,造成页面加载速度慢和性能浪费 强制缓存 强制缓存和响应头里的一个属性息息相关,这个属性就是cache-control cache-control: no-cache 不缓存,即每次都要向服务器请求拿资源 cache-control
阅读全文
摘要:forEach 只能用作遍历数组,不能遍历对象 因为他是一个回调,所以不能使用break,return或continue来中断运行,一旦遍历就会遍历整个数组 for...of... 只能用作遍历数组,不能遍历对象 是循环,所以可以使用break,return或者continue来中断 for...i
阅读全文
摘要:我们知道,字符串是原始类型,是不可扩展的(没有方法) 那为什么字符串可以调用substring,slice等方法呢? 这是因为js在执行字符串语句的时候,对字符串进行了一层包装,就是我们常说的包装类型 new String()生成一个示例,将这个实例用另一个变量储存,实例调用方法(对象的可扩展性),
阅读全文
摘要:为了更好的理解作用域链,有以下代码示例: var a = 'aaa' try{ console.log('1',a,b,c,d); }catch(err){ console.log('1',err); } function fn1(){ var b = 'bbb' try{ console.log(
阅读全文
摘要:方法1,使用闭包 let arr = [] function fn(){ let arg = [...arguments] // 用另一个变量表示外部函数的实参 function closure(){ // 使用闭包将变量持久化 arr = [...arr,...arg] } closure() r
阅读全文
摘要:期待结果:每隔一秒输出一个累加值 temp1:默认,为什么不行 function fn(){ for(var i = 0; i < 5; i++){ setTimeout(() => { console.log(i) },i*1000) } } temp2:函数参数保存值,为什么可以 functio
阅读全文
摘要:现有对象obj和空对象copy,想将obj的每一项都复制到copy对象中 let obj = { name:'aaa', age: 18 } let copy = {} 方法1:使用for...in... for(let key in obj){ copy[key] = obj[key] } con
阅读全文
摘要:首先给出结果,会输出true js隐式转换的步骤 1.字符串和数字比较,把字符串转换成数字 2.两者中有Boolean,把Boolean转换成数字 3.两者中一者是对象,另一者是字符串或数字,对象会调用valueOf或toString方法转化成字符串或数字, null==undefined为true
阅读全文
摘要:方法一,使用代理(对象的set,get) let num = 1 Object.defineProperty(window,'a',{ get(){ return num++ }, set(){ } }) console.log(a==1&&a==2&&a==3) // => true 方法二,利用
阅读全文
摘要:JS内存机制 JavaScript具有自动垃圾回收机制,周期性会检查没有使用的变量,进行回收释放。所以在闭包中,如果引用了外部的变量,则无法进行释放和回收,一般会传参进去。 垃圾回收:找出那些不再继续使用的变量,然后释放其占用的内存,垃圾收集器会按照固定的时间间隔周期性地执行这一操作。 在JS中,每
阅读全文
摘要:1.内存泄露 有以下代码执行: ... <script> for(let i = 0; i < i+1; i++){ console.log(i) } </script> ... 会发生什么现象呢? 1.此时打开浏览器执行此html代码,会发生浏览器卡死现象,只能强制关闭浏览器 2.打开任务管理器,
阅读全文
摘要:var a = 1 var a console.log(a) 上面这段代码输入1,为什么第二次声明没有覆盖第一次声明呢? var a = 1 var a = 2 console.log(a) 上面这段代码输出2,这里为什么第二次声明又覆盖了第一次声明呢? 这要从js代码运行机制说起: 在JS代码运行
阅读全文
摘要:1.稀疏数组 let arr = [1,2,3] console.log('这是一个js常规的数组',arr) // [1,2,3] let arr1 = [] arr1[2] = 'a' console.log('这是一个稀疏数组',arr1) // [empty x 2,'a'] // 如上,a
阅读全文
摘要:1.普通函数 function getArg(name,age){ console.log(arguments) } getArg('zzz',18) 输出{"0":"zzz", "1":18},可以看出arguments就是以参数下标为key,参数值为value 组成的对象 2.箭头函数 箭头函数
阅读全文
摘要:const arr = [1,2,2,3,4,4,4,4,5,5,6,7,8,8] // 第一种方法 Array.from() let setArr = new Set(arr) // 将数组转化成set结构 ==> Set { 1, 2, 3, 4, 5, 6, 7, 8 } let r1 = A
阅读全文