javascript
文章平均质量分 83
今天长高了没1
这个作者很懒,什么都没留下…
展开
-
个人网站集成qq登录的过程及一些坑
想着给自己的博客加评论功能,然后想着没登录也不太行,正好之前在公司实习有做过飞书集成相关的事情,于是就打算给自己的网站集成个qq登录。过程繁琐,而且qq互联给的文档简陋,坑多,所以记录一下。1.首先去qq互联申请一个app(前提已经有域名了,没域名申请不到)此处有几个大坑,一个是网站名称一定要和你申请域名时备案的网站名称一样然后就是提供方,是腾讯云就填腾讯云,是阿里云就填阿里云另外就是回调域,这个通常就是在你自己的域名后加上一个路径,例如集成qq登录,就填一个http://www.[你自己的域名]原创 2021-03-11 22:29:42 · 866 阅读 · 0 评论 -
javascript实现双向链表
function DoublyLinkedList() { this.head = null this.tail = null this.length = 0 function Node(data) { this.data = data this.next = null this.prev = null } DoublyLinkedList.prototype.append = function(el) { let newNode = new Node原创 2020-11-25 20:17:26 · 102 阅读 · 0 评论 -
javascript实现优先级队列
function PriorityQueue() { function QueueElement() { this.element = element this.priority = priority } this.items = [] PriorityQueue.prototype.enqueue = function() { let queueElement = new QueueElement(element, priority) if (this.i原创 2020-11-25 16:36:57 · 155 阅读 · 0 评论 -
javascript栈实现
// 基于数组实现栈结构function Stack() { this.items = [] // 类的方法挂载到prototype可以实现共享,可以节省内存 // 压栈 Stack.prototype.push = function(element) { this.items.push(element) } // 弹栈并返回 Stack.prototype.pop = function() { return this.items.pop() } // 查看栈顶元素 Stack原创 2020-11-25 16:36:17 · 90 阅读 · 0 评论 -
javascript队列实现
function Queue() { this.items = [] Queue.prototype.enqueue = function(element) { this.items.push(element) } Queue.prototype.dequeue = function() { return this.items.shift() } Queue.prototype.front = function() { return this.items[0]原创 2020-11-25 16:35:32 · 113 阅读 · 0 评论 -
javascript链表实现
function LinkedList() { // 内部类 function Node(data) { this.data = data this.next = null } // 属性 this.head = null this.length = 0 // 列表尾部添加 LinkedList.prototype.append = function(element) { let newNode = new Node(element) if(t原创 2020-11-25 16:34:46 · 76 阅读 · 0 评论 -
JavaScript的垃圾收集机制
JavaScript的垃圾收集机制原理:找出不再继续使用的变量,然后释放其占用的内存。垃圾收集器会按照固定的时间间隔,周期性地执行这一操作。- 标记清除垃圾收集器会在运行的时候给内存中的所有变量打上标记,然后它会去掉环境中的变量以及被环境中变量引用的变量的标记,于是剩下的即为将被回收的变量,最后垃圾收集器完成内存清除工作。- 引用计数跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型赋给该变量时,这个值的引用次数就是1。如果该值再次被赋给另一个变量时,引用次数就再加一,当包含对该值引用的原创 2020-09-16 09:16:41 · 85 阅读 · 0 评论 -
js数组sort方法会调用每个项的toString方法来比较字符串
function compare(value1, value2) { if (value1 < value2) { return -1; } else if (value1 > value2) { return 1; } else { return 0; }}nums = [1, 2, 3, 10, 1000, 5]console.log(nums.sort()); // [ 1, 10, 1000, 2,原创 2020-07-19 12:12:27 · 283 阅读 · 0 评论 -
javascript没有块级作用域
if(true) { var color = "blue";}console.log(color); //"blue"for(var i = 0; i < 10 ; i++) { doSomething(i);}console.log(i); //10在C、C++或Java中,color会在if语句执行完毕后被销毁,但在JavaScript中,if语句中的变量声明会将变量添加导当前的执行环境(上述两个例子为全局环境)。...原创 2020-07-16 07:07:16 · 236 阅读 · 0 评论 -
词法作用域中的eval()和with()
词法作用域意味着作用域是由书写代码时函数声明的位置来决定的。嵌套的作用域类似为严格包含的嵌套气泡结构。作用域查找从运行时所处的最内部作用域开始,逐级向外进行,直至遇见第一个匹配的标识符为止。这种查找方式将引起“遮蔽效应”,即内部的标识符“遮蔽”了外部的标识符,被遮蔽的标识符除了全局变量可以通过window.a的方式来访问,其余非全局的变量将无法被访问到。(全局变量会自动转换为window对象的属性)存在两种机制可以打破这种规则:eval()function foo(str,a){ eval(原创 2020-05-26 16:02:13 · 190 阅读 · 0 评论 -
javascript引擎LHS查询与RHS查询的区别
先说结论:LHS查询盒子,RHS查询值例如:LHS查询var a = 2;上面这一句赋值语句,对a变量执行的是LHS查询,它的目的是为 =2 的赋值操作找到一个目标,即一个盒子。在编译器遇到 var a 时会询问作用域是否已存在一个叫a的变量,若存在则编译器会忽略该声明继续进行编译,若不存在则会要求作用域在当前作用域中声明一个新的变量并命名为 a。RHS查询console.log(a);上面这一句打印语句,对a变量执行的时RHS查询,因为它的目的是找到a变量内部的值并打印而不是给它进行赋原创 2020-05-26 12:28:17 · 338 阅读 · 0 评论