共同点: 功能角度:三者都能改变 this 指向,且第一个传递的参数都是 this 指向的对象。 传参角度:三者都采用的后续传参的形式。 不同点: 传参方面: call 的传参是单个传递(序列),而 apply 后续传递的参 数是数组形式。而 bind 与call相同。 执行方面: call 和 apply 函数的执行是直接
是否是默认导出 默认导出 不加{} 不是默认导出加{} test.js export default function fn() { console.log(“fn”); } export function fn2() { console.log(“fn2”); } export function fn3() { console.log(“fn3”); } index.js import fn from “./test.js”; import {
ES6 允许使用 箭头 (=>)定义函数 声明一个函数 let fn() =function (){ } let fn=(a,b)=>{ return a+b; } //调用函数 let result =fn(1,2); console.log(result); 控制台输出 箭头函数声明特性: 1.this是静态的,this始终指向函数声明时所在作用域下的this的值 演示:
观察者模式 分为观察者与目标,观察者 -> 订阅目标,目标 -> 触发事件,目标里维护了一套观察者列表。观察者与目标之间形成了松耦合。 // 观察者 class Observer { constructor() {} update() {} } // 观察者列表 class ObserverList { constructor(list) { this.list = lis
一、函数调用方式决定了this指向 1、普通函数调用,this指向window(非严格模式下,严格模式下,指向undefined) function fn() { console.log(this); // window } fn(); // window.fn(),此处默认省略window 2、构造函数调用,此时this指向实例对象 function Pe
Array.map精简版源码 基本思路 函数中的 this 指向调用这个 api 的数组创建一个数组 arr 存储原函数的值创建一个空数组,存放 fn 处理完的数据(fn处理数据的逻辑是开发者写的)遍历原数组,把原数组中的每一项都通过fn处理,并存贮在空数组中返回处理后的数据 代码实现 Array.prototy
function deBounce(fn, delay) { let timer = null; //这里巧妙地运用了闭包的特性,使得timer不仅不会被销毁,并且避免了每次都初始化一遍 return function (e) { if (timer) { clearTimeout(timer); //若之前的定时器还在,则清空之前的
享元 思想:抽出不同的部分。 // 源代码 function a(paramsm, fn) { let arr1 = []; let arr2 = []; if (params) { arr1.forEach(fn); } else { arr2.forEach(fn); } } // 享元模式 function a(paramsm, fn) { let arr1 = []; let arr2 = []; let target
在写wk2312的驱动,刚开始用IMX8MM的硬件SPI进行SPI转串口的驱动。前面被CS引脚困住了一周,无奈只能用软件模拟使用。现在又遇到一个问题,在测试的时候用insmod的方法是可以正使看到sttyWK0与sttyWK1的,但放到内核里面进行编译,尝试静态加载这个SPI转串口驱动,结果,CS脚死活申请不了资源。
这里主要讲堆的数据回收,先上图 除了图上内容还有一点就是不管什么类型的垃圾回收器,都是差不多的处理流程: 1.扫描标记活动对象与非活动对象 2.非活动对象回收 3.整理内存碎片 例如调用fn会创建一个arr数组,并return arr,回收器会标记为活动对象, 当fn()执行完毕获得返回结果后,会标记
在utils/index.js 文件中 // 防抖 立即执行 function debounce(fn, arg) { // delay = delay || 1000; let delay = 1000; let timeout; return function() { let context = this; if (timeout) clearTimeout(timeout); let callNow = !timeout; timeo
防抖和节流严格算起来属于性能优化的知识,但实际上遇到的频率相当高,处理不当或者放任不管就容易引起浏览器卡死,所以还是有必要早点掌握的。 从滚动条监听的例子说起 先说一个常见的功能,很多网站会提供这么一个按钮:用于返回顶部。 这个按钮只会在滚动到距离顶部一定位置之
console.log(a) var a; console.log(a) a = 10 console.log(a) function a() { let c = 1; } console.log(a) //相当于: function a() { let c = 1; } var a; console.log(a) console.log(a) a = 10 console.log(a) console.log(a
Golang1.17源码分析之goroutine-009 Golang1.17 学习笔记009 包位置:runtime/runtime2.go 全局变量 g0 主协程、m0 工作线程 P 里面只是有个本地 runq,全局的 runq 存储在 sched 中 获取任务顺序,先从 m 自身 p 中的 runq 获取,没有就去全局 sched 中获取,没有再去其他 q 中拿一
防抖 高频操作,最后一次生效。 function debounce(fn) { let timer = null; return (...args) => { clearTimeout(timer); setTimeout(() => { fn.applay(this, args); }, 500); }; } 节流 高频操作,每隔一段时间生效。 function throttle(fn) { let tim
定义 将接收多个参数的函数转换成接收单一参数的函数,并且返回一个接收余下的参数的新函数。 应用场景 参数重复 // 柯里化 前 function validate(rule, value) { console.log('rule :>> ', rule); console.log('value :>> ', value); } validate(/\d/, 1); validate(/\d/, '
定义和用法 filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。 注意: filter() 不会对空数组进行检测。 注意: filter() 不会改变原始数组。 语法 array.filter(function(currentValue,index,arr), thisValue) 注意:function参数必选,thisVa
【引言】 有的时候我们需要把某个目录下多个工作薄文件合并到一个文件,比如:一个小商店每个月都有一个以月份为名称的结算表,到了年底,可能需要把它们合成一个以年度为名称的工作薄,一是精简文件,二是方便管理,如何实现?(以下方法均针对需要合并的工作薄中都只有一个工作表) 实现方法一 如
函数节流:高频事件触发后,在n秒内事件只触发一次,节流函数可以稀释函数的执行频率,应用场景:scroll,touchmove function throttle(fn,delay){ let can = true let func = () => { if(!can) return can = false setTimeout(() => { fn.app
Stack vs Heap(栈内存 vs 堆内存) Stack(后进先出,LIFO) Stack上的数据必须拥有已知的固定的大小 大小未知的数据或运行时大小可能发生变化的数据必须存放在heap上 String类型 //创建String类型的值 使用from函数 let s = String::from("hello"); 这类字符串可以被修改 fn main()
今天看到了一个关于this指向的面试题,在这里记录下,题如下 1 var length = 10 2 function fn(){ 3 alert(this.length) 4 } 5 var obj = { 6 length: 5, 7 method: function(fn) { 8 fn() 9 arguments[0]() 10 } 11 } 12 obj.method(f
防抖和节流相似,都是为了减小服务器的压力。 防抖:比如现在有个输入框,需求用户每次输入能够实时查询相关数据(模糊查询),这时候就需要做个防抖处理,也就是我们尽可能等用户输入完之后再去查询,可以设定个时间,输入完1.5秒或两秒后再去查询(如果在设定的时间又触发事件,会把上次的清除掉,重
转载自:https://mp.weixin.qq.com/s/SdqbKEDPhSYXrQZkXH03Gg 函数重载指的是有多个同名的函数,但是它们的签名或实现却不同。当调用一个重载函数 fn 时,程序会检验传递给函数的实参/形参,并据此而调用相应的实现。 int area(int length, int breadth) { return length * breadth;
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。 样例输入 10 样例输出 55 样例输入 22 样例输出 7704 数据
首先配置Apache服务器可处理Python程序,详见:https://www.cnblogs.com/tywusy/p/15862481.html HTML文件:index.html <!DOCTYPE html><html><head><meta charset="utf-8"><title>try it</title></head><body><form action="