回调函数

webpack4.0各个击破(8)—— tapable篇

∥☆過路亽.° 提交于 2019-12-02 14:01:16
webpack 作为前端最火的构建工具,是前端自动化工具链 最重要的部分 ,使用门槛较高。本系列是笔者自己的学习记录,比较基础,希望通过 问题 + 解决方式 的模式,以前端构建中遇到的具体需求为出发点,学习 webpack 工具中相应的处理办法。(本篇中的参数配置及使用方式均基于 webpack4.0版本 ) 一. tapable概述 tapable 地址: 【tapable-0.2】 tapable 是 webpack 的核心框架(4.0以上版本的API已经发生了变化),是一个基于事件流的框架,或者叫做发布订阅模式,或观察者模式, webpack 的整个生命周期及其开放的自定义插件系统都离不开 tapable 的支持,研究其运行原理是阅读 webpack 源代码的第一步。官方仓库 master 分支的代码是经过ES6重构的,模块化拆分非常细,且加入了很多非核心逻辑,阅读难度较大。建议先从官方仓库中0.2版本的分支开始学习,整个源码只有400行,相对容易理解。 二. tapable-0.2源码解析 2.1 代码结构 //类定义 function Tapable() { this._plugins = {}; } //模块导出 module.exports = Tapable; //定义了许多内部方法和原型方法 ... Tapable 实际上就是一个类定义的模块。 2.2

回调函数的案例

瘦欲@ 提交于 2019-12-02 12:25:25
参考链接: 指针参数在函数中不能改变指针指向的原因和解决方法 https://www.cnblogs.com/zhaoshuai1215/p/3450788.html 14 面向接口编程 14.1案例背景 一般的企业信息系统都有成熟的框架。软件框架一般不发生变化,能自由的集成第三方厂商的产品。 14.2 案例需求 要求在企业信息系统框架中集成第三方厂商的游戏功能产品。软件设计要求:能够满足用户需求,完成的产品可以与用户完美对接。 14.3 案例要求   1)能支持多个厂商的游戏功能产品入围 2)能够实现第三方产品和用户产品的对接 3)系统整体框架不轻易发生改变 14.4 编程提示 1)抽象游戏中玩家结构体设计(struct Player)    2)框架接口设计(playGame) a) 初始化游戏 b) 核心功能战斗 c) 查看玩家信息 d) 结束游戏 3) a) 游戏厂商1入围(GameCompany1) b) 游戏厂商2入围(GameCompany2) 4)框架接口分文件编写 //回调函数 //以下是函数指针类型 //初始化游戏 typedef void(*INIT_GAME)(void ** gameHandle, char * name); //游戏战斗 返回游戏战斗结果 如果是1 代表游戏胜利 返回0 代表战斗失败 typedef int(*FIGHT_GAME)

浏览器兼容问题笔记

只谈情不闲聊 提交于 2019-12-02 12:14:15
Safari浏览器: 1.safari执行history.go(-1);需要添加return false; Chrome浏览器 1.Chrome浏览器要预读图片,需要通过对图片的预加载。注:预加载前一定要将<img>加入<body> 1 /* 预加载图片 node-<img> func-回调函数 */ 2 function preLoadImg(node, func){ 3 var img = new Image(); 4 img.onload = function (){ 5 func.call( this ,回调函数所需参数); 6 }; 7 img.src = node.src; 8 } 更多专业前端知识,请上 【猿2048】www.mk2048.com 来源: https://blog.csdn.net/weixin_39037804/article/details/102759929

实现原生Ajax的过程和代码

二次信任 提交于 2019-12-02 11:17:30
1 概述 Ajax是前端中发送请求最最基础的方法,在jq中已经封装好了,在axios中更是多次封装,那Ajax的实现原理到底是怎样的呢? 本博文就原生Ajax进行解析和代码展示, 2 Ajax 创建XMLHttpRequest对象; 注意兼容 注册回调函数,在XMLHttpRequest中设置要发送的请求,利用的是open(first,second,third)方法 1)param first:提交的方式 get或者是post 2)param second:该次请求的路径url,如果是get,则需要在路径后加上传递的相应参数parama,该url为servlet对应的url 3)param third:提交的模式是同步模式还是异步模式 true代表异步模式 发送请求给服务器,利用的是xmlHttp.send(null) ,加上null代表火狐和ie都支持 利用xmlHttp的onreadystatechange的事件来监视xmlHttp.readyState的状态,每次改变时都调用函数(回调函数) 在回调函数中处理返回值 利用dom模型写到页面的指定位置 实现局部刷新 var XHR = null ; var XHRcreate = function ( ) { if ( window . XMLHttpRequest ) { //针对FireFox,Mozillar,Opera

js中的回调函数

蹲街弑〆低调 提交于 2019-12-02 09:14:07
回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。 看代码: //定义主函数,回调函数作为参数 function A(callback) { callback(); console.log('我是主函数'); } //定义回调函数 function B(){ setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作 } //调用主函数,将函数B传进去 A(B); //输出结果 我是主函数 我是回调函数 来源: https://www.cnblogs.com/my12-28/p/11740642.html

回调函数

我与影子孤独终老i 提交于 2019-12-02 08:58:32
1 <script> 2 3 //执行函数就等于:函数名+(); 整个函数+(); 4 // 1.fn(); 5 // 2.(function(){})() 6 7 fn(test); 8 fn(demo); 9 //回调函数:函数作为参数进行传递和使用。 10 function fn(demo){ 11 demo(); 12 test(); 13 } 14 15 function test(){ 16 console.log("我是被测试的函数!"); 17 } 18 function demo(){ 19 console.log("wishing被测试的函数!"); 20 } 21 22 </script> //回调函数一般是用于定义一个规则来使用的。//规则的传递只能通过函数实现。通过变量无法达成。所以我们需要传递规则的时候必须使用回调函数。 来源: https://www.cnblogs.com/my12-28/p/11739519.html

lib异步中断

佐手、 提交于 2019-12-02 08:10:41
基于libusbx-1.0.18-rc1,libusbx现已重新merage到libusb。 1. 初始化 使用libusb_init初始化libusb,如果是单设备通信,ctx参数可以传NULL,表示使用默认Context. 2. 注册hotplug事件侦听 从1.0.16开始,libusb支持hotplug事件侦听,可以使用接口libusb_hotplug_register_callback注册基于以下几种filter的回调函数: libusb_hotplug_event: 分LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED和 LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT俩种; vendor_id:只有指定的vendor id匹配的设备能够触发回调,或设置LIBUSB_HOTPLUG_MATCH_ANY,使得任意vendor id的设备都能触发回调; product_id:只有指定的product id匹配的设备能够触发回调,或设置LIBUSB_HOTPLUG_MATCH_ANY,使得任意product id的设备都能触发回调; dev_class:只有指定的device class匹配的设备能够触发回调,或设置LIBUSB_HOTPLUG_MATCH_ANY,使得任意device class的设备都能触发回调。

并发编程 --- 线程补充2

荒凉一梦 提交于 2019-12-02 07:13:36
目录 线程 线程 event事件 作用:用来控制线程的执行, 使用方法: Event是threading中的一个类,调用里边的一些方法对线程进行一些操作。 e = Event() 在某一个线程中出现了e.wait()的时候,此时这个线程就不能执行,e.wait()可以在多个线程中。 接触e.wait()的方法是,在别的线程中使用e.set(),此时其他线程中的e.wait()的线程都可以继续运行。 例: from threading import Event from threading import Thread import time # 调用Event类实例化一个对象 e = Event() # 若该方法出现在任务中,则为False,阻塞 # e.wait() # False # 若该方法出现在任务中,则将其他线程的Flase改为True,进入就绪态与运行态 # e.set() # True def light(): print('红灯亮...') time.sleep(5) # 应该开始发送信号,告诉其他线程准备执行 e.set() # 将car中的False ---> True print('绿灯亮...') def car(name): print('正在等红灯....') # 让所有汽车任务进入阻塞态 e.wait() # False print(f'{name

(day31) Event+协程+进程/线程池

点点圈 提交于 2019-12-02 07:00:55
目录 昨日回顾 GIL全局解释器锁 计算密集型和IO密集型 死锁现象 递归锁 信号量 线程队列 FOFI队列 LIFO队列 优先级队列 今日内容 Event事件 线程池与进程池 异步提交和回调函数 协程 yiled gevent模块 昨日回顾 GIL全局解释器锁 本质上是互斥锁 Cpython才有的 同一个进程下开启多个线程,让并发变成串行,保证线程安全 计算密集型和IO密集型 计算密集型 使用多进程 IO密集型 使用多线程 死锁现象 两个锁在两个或多个线程或进程中被相互调用,从而陷入相互等待的现象 递归锁 解决死锁问题,相当于串在一起的锁,只有在递归锁的引用计数为0 ,才能被使用 信号量 相当于锁店,设置多少个就能被多少个线程或进程使用 线程队列 FOFI队列 先进先出 LIFO队列 后进先出 优先级队列 按照从左到右,根据数字/acsii大小,越小,优先级越高 今日内容 Event事件 控制线程的执行,由一些线程去控制另一些线程 当Event对象为False时,该线程会被阻塞,直至Event对象为真,相当于红绿灯的作用 isSet():返回Event对象的状态 wait():判断Event对象的状态,若为Flase,则阻塞 Set():设置Event对象为Ture clear():恢复Event对象为False from threading import Event from

Ajax全套

家住魔仙堡 提交于 2019-12-02 06:00:56
概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上。 1、传统的Web应用 一个简单操作需要重新加载全局数据 2、AJAX AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案。 异步的JavaScript: 使用 【JavaScript语言】 以及 相关【浏览器提供类库】 的功能向服务端发送请求,当服务端处理完请求之后,【自动执行某个JavaScript的回调函数】。 PS:以上请求和响应的整个过程是【偷偷】进行的,页面上无任何感知。 XML XML是一种标记语言,是Ajax在和后台交互时传输数据的格式之一 利用AJAX可以做: 1、注册时,输入用户名自动检测用户是否已经存在。 2、登陆时,提示用户名密码错误 3、删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。 “伪”AJAX 由于HTML标签的iframe标签具有局部加载内容的特性,所以可以使用其来伪造Ajax请求。 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title><