08 2022 档案
摘要:这种解法有问题!! [12,4,16,3].sort(function() { return 5 - Math.random(); }); v8 在处理 sort 方法时,使用了插入排序和快排两种方案。当目标数组长度小于10时,使用插入排序;反之,使用快排。 通俗的说,其实我们使用 array.so
阅读全文
摘要:最大公约数的计算,用到辗转相除法 例如:求 gcd(24, 10) ,可以转换为 gcd(10,4), 然后是 gcd(4,2) ,然后是(2,0),最好得出结果是2 方法1: function gcd(a, b) { var temp if (a < b) temp = b, b = a, a =
阅读全文
摘要:尾递归和普通递归有啥区别 尾调用,是指函数内部的最后一个动作是函数调用。该调用的返回值,直接返回给函数。 举个例子: // 尾调用 function f(x){ return g(x); } // 非尾调用 function f(x){ return g(x) + 1; } 模拟下上述执行上下文栈:
阅读全文
摘要:何为函数记忆 函数记忆是指将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接返回缓存中的数据。 常用于,复杂且有重复的计算。 例如:斐波那契数列的计算 underscore中的实现 function memoize(func, hasher) { var memoize = func
阅读全文
摘要:Array.prototype.map Array.prototype.map2 = function(callbackfn, thisArg) { if (this == null) { throw new TypeError('Cannot read property "map" of null
阅读全文
摘要:节流 函数节流指的是某个函数在一定时间间隔内(例如 3 秒)只执行一次,在这 3 秒内 无视后来产生的函数调用请求,也不会延长时间间隔。3 秒间隔结束后第一次遇到新的函数调用会触发执行,然后在这新的 3 秒内依旧无视后来产生的函数调用请求,以此类推。 此时「管道中的水」就是我们频繁操作事件而不断涌入
阅读全文
摘要:Object.assign 原理及其实现 MDN: 主要是将所有可枚举属性的值从一个或多个源对象复制到目标对象,同时返回目标对象。 // 第一步 let a = { name: "advanced", age: 18 } let b = { name: "muyiy", book: { title:
阅读全文
摘要:对于 Object.prototype.toString() 方法,会返回一个形如 "[object XXX]" 的字符串。 如果对象的 toString 方法没有被重写,就会返回如上面形式的字符串。 ({}).toString(); // => "[object Object]" Math.toS
阅读全文
摘要:call、apply、bind和new的模拟实现 1. call和apply call方法和apply方法,实现一个就行了,两个方法除了第二个参数以外,其他完全一样。 apply方法第二个参数传入的是个参数数组。 call()方法在使用一个指定的this值和若干个指定的参数的前提下调用某个函
阅读全文
摘要:高阶函数 高阶函数英文叫 Higher-order function,它的定义很简单,就是至少满足下列一个条件的函数: 接受一个或多个函数作为输入 输出一个函数 也就是说高阶函数是对其他函数进行操作的函数,可以将它们作为参数传递,或者是返回它们。 简单来说,高阶函数是一个接收函数作为参数传递或者将函
阅读全文
摘要:1. 浅拷贝 创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。 简单来说:浅拷贝只拷贝了对象第一层属性的基本类型值,以及第一层的引用地址。 常见的
阅读全文
摘要:对于This的理解 js在执行一段可执行代码时,会创建对应的执上下文,对于每个执行上下文,都有三个重要属性: 变量对象 作用域链 this 当一个函数调用时,会创建一个执行上下文,这个上下文包括函数调用的一些信息(调用栈,传入参数,调用方式),this就指向这个执行上下文。 this值在进入上下文的
阅读全文
摘要:闭包的定义 MDN 对闭包的定义: 闭包是指那些能够访问 自由变量 的 函数。 两个点,首先闭包必须是 函数,其次必须要能访问 自由变量 自由变量指哪些? 自由变量是指在函数中使用的,但既不是函数参数也不是函数内局部变量的变量。 由此,我们可以看出闭包由两部分构成: 闭包 = 函数 + 函数中使用的
阅读全文
摘要:什么是元编程? 维基百科: 元编程 (meta programming)是一种编程技术,编写出来的计算机程序能够将其他程序作为数据来处理。 意味着可以编写出这样的程序:它能够读取、生成、分析或者转换其它程序,甚至在运行时修改程序自身(反射)。 举个例子,如果想要查看对象a和对象b之间的关系,是否是通
阅读全文
摘要:js实现继承的多种方式 1. 原型链继承 function Parent() { this.name = 'xwk' } Parent.prototype.getName = function() { console.log(this.name) } function Child() {} Chil
阅读全文
摘要:分析js代码的运行顺序 1. 下面的问题你能准确回答出来么? 词法作用域是什么?动态作用域是什么? js代码是一行一行运行的么? 什么是执行上下文?执行上下文栈? 活动对象(AO)?变量对象(VO)?作用域链? 2. 静态作用域和动态作用域 var value = 1; function foo()
阅读全文
摘要:JS的原型和原型链究竟是什么? 1. 从JS创建一个对象开始说起: 1.1 工厂模式创建对象 (缺点是无法知道创建出来的对象是一个什么类型的对象) function createPerson(name, age, job) { let o = new Object(); o.name = name;
阅读全文
摘要:js创建对象的多种方式 1. 工厂模式 function createPerson(name) { var o = new Object() 0.name = name return o } var person1 = createPerson('xwk') 缺点:创造出来的对象无法识别,因为都指向
阅读全文