回调函数

防抖与节流函数<转>

你说的曾经没有我的故事 提交于 2019-12-04 02:32:23
本文转自: https://www.cnblogs.com/zhuanzhuanfe/p/10633019.html 我们经常会处理各种事件,比如常见的click、scroll、 resize等等。仔细一想,会发现像scroll、onchange这类事件会频繁触发,如果我们在回调中计算元素位置、做一些跟DOM相关的操作,引起浏览器回流和重绘,频繁触发回调,很可能会造成浏览器掉帧,甚至会使浏览器崩溃,影响用户体验。 还有以下场景往往由于事件频繁被触发,因而频繁执行DOM操作、资源加载等重行为,导致UI停顿甚至浏览器崩溃。 1. window对象的resize、scroll事件 2. 拖拽时的mousemove事件 3. 射击游戏中的mousedown、keydown事件 4. 文字输入、自动完成的keyup事件 实际上对于window的resize事件,实际需求大多为停止改变大小n毫秒后执行后续处理;而其他事件大多的需求是以一定的频率执行后续处理。 针对这两种需求,常用的解决方案:防抖和节流。 防抖(debounce) 所谓防抖,就是指触发事件后,就是把触发非常频繁的事件合并成一次去执行。即在指定时间内只执行一次回调函数,如果在指定的时间内又触发了该事件,则回调函数的执行时间会基于此刻重新开始计算。 以我们生活中乘车刷卡的情景举例,只要乘客不断地在刷卡,司机师傅就不能开车

策略模式(回调函数)

拟墨画扇 提交于 2019-12-04 02:21:35
/** * */ package com.zachary.io.util; import java.io.File; import java.io.IOException; /** * @author Zachary.Zheng * @version 1.0 * @date 2019年11月9日 */ public class ProcessFiles { public interface Strategy{ void process(File file); } private Strategy strategy; private String ext; public ProcessFiles(Strategy strategy, String ext) { super(); this.strategy = strategy; this.ext = ext; } public ProcessFiles() { super(); } public void start(String [] args) { try { if(args.length == 0) { processDirectoryTree(new File(".")); } else { for (String arg : args) { File fileArg = new File(arg); if(fileArg

JavaScript 运行机制详解:再谈Event Loop

南笙酒味 提交于 2019-12-03 21:22:03
一年前,我写了一篇 《什么是 Event Loop?》 ,谈了我对Event Loop的理解。 上个月,我偶然看到了Philip Roberts的演讲 《Help, I'm stuck in an event-loop》 。这才尴尬地发现,自己的理解是错的。我决定重写这个题目,详细、完整、正确地描述JavaScript引擎的内部运行机制。下面就是我的重写。 进入正文之前,插播一条消息。我的新书 《ECMAScript 6入门》 出版了( 版权页 , 内页1 , 内页2 ),铜版纸全彩印刷,非常精美,还附有索引(当然价格也比同类书籍略贵一点点)。预览和购买点击 这里 。 (2014年10月13日更新:本文已经做了较大修改,反映了我现在的认识。关于setTimeout的更多解释和示例,请参阅我正在写的 《JavaScript标准参考教程》 。) (2014年10月11日更新:朴灵老师对本文做了 评注 ,详细得指出了文中存在的错误说法,建议阅读。) 一、为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。 JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程

portaudio使用笔记《转》

左心房为你撑大大i 提交于 2019-12-03 20:22:56
原文链接: https://blog.csdn.net/gg_simida/article/details/77185755 介绍 PortAudio是一个免费、跨平台、开源的音频I/O库。看到I/O可能就想到了文件,但是PortAudio操作的I/O不是文件,而是音频设备。它能够简化C/C++的音频程序的设计实现,能够运行在Windows、Macintosh OS X和UNIX之上(Linux的各种版本也不在话下)。使用PortAudio可以在不同的平台上迁移应用程序,比如你可以把你基于PortAudio的应用程序发展一个Android版本啊。 PortAudio的API非常简单,通过一个一个简单的回调函数或者阻塞的读/写接口来录制或者播放声音。PortAudio自带了很多示例程序,比如播放正弦波形的音频信号,处理音频输入,录制回放音频,列举音频设备。 PortAudio的最新版本是V19。本文讨论的就是该版本。 范例参考 范例参考 下载安装 源码下载路径 VS上编译的步骤 ubuntu下直接使用apt-get install portaudio19-dev即可 使用流程 编写一个PortAudio应用,只需要掌握回调函数即可: 编写一个回调函数,PortAudio在进行音频处理的时候自动调用。 初始化PA库,并为音频I/O打开一个流(stream)。 启动流

Webshell免杀绕过waf

耗尽温柔 提交于 2019-12-03 20:16:30
转自: https://www.cnblogs.com/-qing-/p/10631414.html 0x03 关于eval 于 assert # 关于eval函数在php给出的官方说明是 eval 是一个语言构造器而不是一个函数,不能被 可变函数 调用 可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号(),让系统认为该值是一个函数,从而当做函数来执行 通俗的说比如你 <?php $a=eval;$a() ?> 这样是不行的 也造就了用eval的话达不到assert的灵活,但是在php7.1以上assert已经不行 关于assert函数 assert() 回调函数在构建自动测试套件的时候尤其有用,因为它们允许你简易地捕获传入断言的代码,并包含断言的位置信息。 当信息能够被其他方法捕获,使用断言可以让它更快更方便! 0x04 字符串变形 # 字符串变形多数用于BYPASS安全狗,相当对于D盾,安全狗更加重视"形" 一个特殊的变形就能绕过安全狗,看看PHP手册,有着很多关于操作字符串的函数 ucwords() //函数把字符串中每个单词的首字符转换为大写。ucfirst() //函数把字符串中的首字符转换为大写。trim() //函数从字符串的两端删除空白字符和其他预定义字符。substr_replace() //函数把字符串的一部分替换为另一个字符串substr

promise方法总结

北慕城南 提交于 2019-12-03 17:06:32
优点:1、对象的状态不受外界的影响,只有异步操作的结果可以决定是那种状态;2、状态一旦改变,就不会再次改变。任何时候都可以得到这个结果。在这里跟(event)事件不同,如果错过了这个事件结果再去监听,是监听不到event事件的。 缺点:1、promise一旦执行无法取消。2、如果不设置回调函数promise内部抛出的错误,不会反映到外部。3、当处于pending(进行中)的状态时,无法得知进行到那一阶段(刚开始或者即将完成)。 基本用法:es6规定,promise对象是一个构造函数,用来生成promise实例。promise构造函数接受一个函数作为参数,该函数有两个参数分别是resolve和reject;resolve表示成功的回调,reject表示失败的回调; then方法:then方法返回的是一个新的promise实例。注意:如果采用链式的then,可以指定一组按照次序调用的回调函数,如果前一个回调函数返回的是promise,后一个函数会等前一个状态发生改变才会调用。 catch方法:catch方法是在promise发生错误时的回调。注意:如果promise状态已经变成resolved,在抛出错误时无效的。promise错误具有‘冒泡’性质,会一直往上传递,直到被捕获。 finally方法:finally方法指定无伦最后promise最后状态如何都会执行的函数。注意

微信小程序的页面导航跳转

孤人 提交于 2019-12-03 16:59:30
声明式导航 1.导航到非tabBar页面 非tabBar页面指的是没有被当作tabBar进行切换的页面。 示例代码: <navigator url='pages/info/info' > 点击跳转</navigator> 上述代码使用url属性置顶要跳转到的页面路径,其中页面路径应该以/开头,且路径必须提前在app.json的pages 节点下声明,才能实现正常的跳转。 2.导航到tabBar页面 tabBar页面指的是被当作tabBar进行页面切换的页面。如果navigator组件单纯使用url属性,无法导航到tabBar页面,需要结合open-type属性进行导航。 <navigator url="/pages/home/home" open-type="switchTab">点击跳转</navigator> 3.后退导航 如果要后退到上一页面或多级页面,需要把open-type设置为navigateBack, 同时使用delta属性指定后退的层数。 <navigator open-type="navigateBack" delta="1">返回上一页面</navigator> 编程式导航 1.导航到非tabBar页面 通过wx.navigateTO(Object)方法,可以跳转到应用内的某个页面,但不能跳转到tabBar页面上。其中Object参数对象的属性列表如下。 url

❥微信小程序❥----wx.request,路由跳转,wx数据存取

天涯浪子 提交于 2019-12-03 15:49:37
啦啦啦啦啦啦啦,好开心 没学懂 还在搞昨天的 快一点了 写不完明天咋办呀!好开心 wx.request   首先,我不多bb 先去开发文档看看哈 写的必定比我的好 官方文档   他其实就相当于我们的ajax 指定的参数就 url data method header datatype(返回的数据格式) success   废话不说了 我就直接上代码了 req:function(){ wx.request({ url: '127.0.0.1:8000/get/', method:'POST', data:{ 's':'x' }, header:{'content-type':'application/json'}, success(res){ console.log(res) } }) }   ok 你已经学完了 快速的和你吹下路由跳转 路由跳转   wx.switchTab()   跳转到tabBar页面, 并关闭其他非tabBar页面   参数 url success(调用成功) fail(调用失败) complete(无论调用结束的回调函数都会执行)   wx.redirectTo()   该方法 关闭当前页面, 跳转到应用内的某个页面, 但是不允许跳到tabBar页面   参数 url(改路径可以带参数 使用 option.query取值) success(调用成功)

Async/Await是这样简化JavaScript代码的

余生长醉 提交于 2019-12-03 13:38:23
译者按: 在 Async/Await替代Promise的6个理由 中,我们比较了两种不同的异步编程方法: Async/Await 和 Promise ,这篇博客将通过示例代码介绍 Async/Await 是如何简化JavaScript代码的。 原文: ASYNC/AWAIT WILL MAKE YOUR CODE SIMPLER 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。 Async/Await 是JavaScript的 ES7 新特性,来源于**.NET 和 C# 。它可以不用回调函数,像同步代码那些编写异步代码。这篇博客将通过一些代码示例,来说明 Async/Await**如何简化JavaScript代码。 1. 去除回调函数 运行本文的示例代码,并不需要额外的函数库。对于最新版的主流浏览器中,例如Chrome,Firefox, Safari以及Edge,它们都支持Async/Await语法。另外,Node.js 7.6+也支持了Async/Await语法。 我们编写了一些简单的API接口,用于模拟异步操作。这些接口都返回Promise,并在200ms后 resolve 一些数据。 class Api { constructor () { this.user = { id: 1, name: 'test' }

使用jsonp

与世无争的帅哥 提交于 2019-12-03 13:27:05
jsonp(url,opts,fn)   url:请求到服务端的地址   opts:     params:     timeout:超时的时间,默认是1分钟,如果说一分钟没有收到response,就会调用   fn:回调函数 但是现在     1.安装:npm install jsonp@0.2.1 -D    来源: https://www.cnblogs.com/hou-yuan-zhen/p/11796954.html