啃犀牛书——类
三种实例化对象的方式两种形式定义类工厂函数123456789101112131415161718192021222324function range(from, to) { let r = Object.create(range.methods) // 挂上方法 r.from = from // 公有属性 r.to = to return r // 返回创建好的对象}range.methods = { includes(x) { // 一个判断范围的方法 return x >= this.from && x <= this.to }, *[Symbol.iterator]() { // 一个设置可迭代的生成器方法 for (let i = Math.ceil(this.from); i <= this.to; i ++) { yield i } }, ...
蒜法-二叉树DFS
979. 在二叉树中分配硬币邪门二叉树+DFS,根本设计不出来,图解那么巧妙,我直接大口啃菜。
题目要求大致:
给你一个二叉树,每个节点有随机数量个硬币,要求通过父子传递一次一硬币的方式使二叉树内节点上的硬币数量全部分成1。
先放代码:
123456789101112131415161718192021222324252627282930313233343536/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } *//** * @param {TreeNode} root * @return {number} */v ...
蒜法-数字各种和
先开个头,今天和前天的题涉及到了数的加和处理。
打算再整一个数字加和系列算法题汇总,前提是我的股票算法之旅能够善终(第四个卡壳了)
蒜法-买卖股票
买卖股票最近做了一个动规算法题(1911),发现有一个买卖股票系列很值得循序渐进地上手动规,于是做了做 汇总了一下。
LeeCode教你学炒股:
1.买卖股票的最佳时机
2.买卖股票的最佳时机 II
3.买卖股票的最佳时机 III
4.买卖股票的最佳时机 IV
5.买卖股票的最佳时机含手续费
6.最佳买卖股票时机含冷冻期
最后做一下1911,会发现简单好多
121. 买卖股票的最佳时机只有一次购入和一次出售,找到一个最大利润方案。
12345678910111213/** * @param {number[]} prices * @return {number} */var maxProfit = function(prices) { let now = -prices[0], // 假设如果第一天买入,手里还有这么多钱(负成本) max = 0 // 假设第一天买了接着卖出,利润为0(利润初始值) for (let i = 0, len = prices.length; i < len; i+ ...
啃犀牛书——浏览器中的JS
犀牛书这里太杂了,我有点跟不上,先去看红宝书理顺一下了。
(面了很多次试,和面试官们的交谈中发现这一块蛮重要的,特来回看(实习时间这个事情真的难以在招聘者和应聘者间达成完美一致,真难受))
BOMbrowser object model 浏览器对象模型,提供了与网页无关的浏览器功能对象,这些是可以与浏览器进行交互的对象。
BOM对象有很多↓
windowwindow对象是BOM的核心,表示浏览器的实例。window对象被复用为ES中的Global对象,又是浏览器窗口中的JS接口。(强烈建议自己F12输出看一下)
Global作用域通过var声明的所有全局变量和函数都会变成window对象的属性和方法。
123456var saySth = () => { alert('Sth')}window.saySth()var newVal = window.oldVal // undefined 虽然没有但是undefined
窗口关系对象top始终指向最上层窗口,parent指向当前窗口的父窗口,self始终指向window(两者是同一个 ...
啃犀牛书——JS标准库
前言基础不牢地动山摇吃不好饭睡不好觉。
↓一些之前没提到的有趣数据结构和API。
Set集合&Map映射众所周知,Object类型是一种万能数据结构,可以把字符串映射为任意值。但是这明显限制了映射和集合的发挥(字符串的约束+不必要的toString属性)。ES6新增了两类数据结构↓
Set特点
没有索引
不重复
可迭代(for/of√;forEach(val)√)
非常之快
创建12let set = new Set()let set1 = new Set([1, 'w']) // 构造函数参数必须是可迭代对象(包括其他集合)
属性1let len = set .size // 获取集合长度,确实有点像数组的length属性
方法1234let s = new Set([1, 2, 3])s.add(1) // 增 => [1, 2, 3]s.delete(1) // 删 => falses.has(1) // 查 => false
需要注意的是:Set成员根据严格相等===判断重复。因此,如果值是对象类型的话,也会根据全等来判重, ...
14Days-JS-Pra
Day1计数器
闭包
创建 Hello World 函数
闭包
Day2计数器 II
闭包
转换数组中的每个元素
数组转换
Day3过滤数组中的元素
数组转换
数组归约运算
数组转换
Day4复合函数
输入输出
只允许一次函数调用
输入输出
Day5-可以多回顾一下 记忆函数
输入输出
柯里化
输入输出
↑这个需要会员,我没做,不过看了一些柯里化函数的使用
123456789101112131415161718192021// 一个接收三个参数的普通函数function add(a, b, c) { return a + b + c}// 柯里化function curry(func) { return function curried(...args) { if (func.length <= args.length) { // 当参数个数满足要求时,即可带着参数返回函数执行 return func(...args) ...
啃犀牛书——函数
函数是啥?
函数大致划分?
普通函数
有初始值的函数
构造函数
箭头函数(变量)
作用域
上下文
闭包
JS——异步
试着将学到的东西讲出来。
什么是异步编程 异步编程是一种编程模式。我们知道,JS是单线程的,如果处理器要处理一个耗时很长的业务,比如说一个到1e10的叠加函数,很容易导致进程阻塞。那么这个时候就可以将一些类似的业务先拿到进程以外,通过一些特定的方式去调用它们,同时又能保证其之后的同步代码可以继续正常运行。
JS中如何处理同步和异步所以说通常JS对于一段代码的运行处理时这样子的:
首先将栈内的所有同步代码挨个执行然后抛出。在这个过程中遇到的异步代码对应放入红宏任务或微任务队列中。当同步代码全部执行完毕后,我们先将微任务队列里的代码执行清空,然后从宏任务队列中拿到一个宏任务块。我们将这个宏任务块放进栈中执行,将里面的微任务再次拿到微任务队列中。执行完毕后再次清除微任务队列。这样不断反复,直到栈和两个队列全部清空,这样JS这一部分的代码就执行完毕了。
异步操作主要有哪些 如果对异步操作按照上述过程所述的话可以划分为像setTimeout,setInterval这样的宏任务,以及Promise,MutationObserver这样的微任务。
异 ...
细小功能收纳盒
细小功能收纳盒简单的猜想-网站迁移提示给点信息提示,然后条性重定向一下↓
1234567<html> .... <script> .... setTimeout(() => location.replace('新网页'), 1000) </script></html>
简易悼念模式-filter: grayscale(100%);
悼念模式 是指在某些特殊场合下,例如国家哀悼、重大灾难等,为了表达对逝者的哀悼和敬意,网站或应用程序会采用特定的方式展示,例如改变网站或应用程序的主题色、添加悼念标志等。
实现哀悼模式的方式可以因具体情况而异,但通常可以通过以下方法之一来实现:
CSS样式变更:使用CSS样式来改变网站或应用程序的主题色、字体颜色、背景图像等,以呈现悼念的氛围。
图像或标志添加:在网站或应用程序中添加悼念标志或图像,例如黑色绸带、蜡烛等,以表达对逝者的哀悼和敬意。
功能限制:在某些场合下,为了避免影响哀悼活动的进行,网站或应用程序会限制一些功能,例如禁止发布带 ...