回调函数

[翻译]JavaScript秘密花园 - Type Casting,undefined,eval,setTimeout,Auto Semicolon Insertion - 全部完成PDF打包下载

我只是一个虾纸丫 提交于 2020-01-11 06:30:06
JavaScript Garden - 原文 JavaScript Garden - 中文翻译 PDF打包下载 类型转换 JavaScript 是 弱类型 语言,所以会在 任何 可能的情况下应用 强制类型转换 。 // 下面的比较结果是:truenew Number(10) == 10; // Number.toString() 返回的字符串被再次转换为数字10 == '10'; // 字符串被转换为数字10 == '+10 '; // 同上10 == '010'; // 同上 isNaN(null) == false; // null 被转换为数字 0 // 0 当然不是一个 NaN(译者注:否定之否定)// 下面的比较结果是:false10 == 010;10 == '-10'; ES5 提示: 以 0 开头的数字字面值会被作为八进制数字解析。而在 ECMAScript 5 严格模式下,这个特性被 移除 了。 为了避免上面复杂的强制类型转换, 强烈 推荐使用 严格的等于操作符 。虽然这可以避免大部分的问题,但 JavaScript 的弱类型系统仍然会导致一些其它问题。 内置类型的构造函数(Constructors of built-in types) 内置类型(比如 Number 和 String )的构造函数在被调用时,使用或者不使用 new 的结果完全不同。 new

回调函数

若如初见. 提交于 2020-01-11 00:26:01
一、什么是回调函数? 看了很多版本的解释,终于明白了所谓的回调就是函数A调用函数B并将函数C作为参数传给函数B,并由函数B进行调用的过程,所以这里的函数C就是回调函数。 具体的执行过程可以见下图: 看图中的执行过程咋一看和我们正常的函数执行流程没有什么大的区别,但实际的实现效果却可以因为函数C的不同而千差万别。很多时候对于A->B->C的调用,正常都会在函数B中直接调用C,但是对于不同的应用场景却可能需要在B中调用C、D、E甚至F等等函数。而采用了回调后,却可以由调用者直接根据调用的场景不同选择传入不同的函数进入B中,从而增加了函数的复用、避免了在函数B中出现诸多分支而不易维护的场景。 二、 回调函数实现的机制 :   (1)定义一个回调函数;   (2)提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;   (3)当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。 来源: https://www.cnblogs.com/zhouxingyu1993/p/12178447.html

Unity3d插件iTween的使用

霸气de小男生 提交于 2020-01-10 18:21:13
iTween.cs 下载地址:http://pan.ceeger.com/viewfile.php?file_id=1830&file_key=0UJAymOJ 版本为2.0.43 一. iTween 介绍 iTween是一个动画库,目的是最小的投入实现最大的产出.让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等。 二.iTween 原理 iTween的核心是数值插值,简单说就是给iTween两个数值(开始值,结束值),它会自动生成一些中间值,例如:, 开始值-> 中间值 -> 中间值 …. -> 结束值。 这里的数值可以理解为: 数字,坐标点,角度,物体大小,物体颜色,音量大小等。 三. 主要文件有两个iTween.cs 和 iTweenPath.unity package(编辑路径才需要这个包) http://l6.yunpan.cn/lk/Qv44q7AV7emHG 四.如何将iTween 加入项目: 在项目中建立Plugins目录, 然后将下载的iTween.cs放到Plugins目录即可。 如果需要编辑路径, 使用import package->custom package菜单功能加入iTweenPath.unitypackage。 五.几种效果演示 1. 物体移动 iTween.MoveTo(gameObject,new

JavaScript模块化编程

时光毁灭记忆、已成空白 提交于 2020-01-10 17:34:24
文章目录 CommonJS AMD CMD AMD和CMD的区别 说起模块化编程,经常会听到什么CMD、AMD、CommonJS,记录一下自己的理解,虽然自己用得不是很多。 CommonJS NodeJS就是参照CommonJS规范实现的 // 导出 module.export math = ... // 引入 var math = require('math'); 但是存在一个问题,就是必须等模块导入了,才能继续运行。 这样就非常不适合浏览器,因为如果网速慢,就会一直等待等待,就会出现"假死"的情况。 所以就可以采用异步的方式,这个就是AMD。 AMD AMD(“Asynchronous Module Definition”),就是“异步模块加载”,就是在引入某一个模块时,写入一个回调函数,等模块加载完成就会执行回调函数。 需要提前下载好 require.js ,并且在html中引入 // 引入require.js // html内容 <div> <h1>Require Demo 1 -- usage of Require()</h1> <button id="contentBtn">Click me</button> <p id="messagebox"></p> </div> <script data-main="js/script/main.js" src="js/lib

JavaScript定时器及其他

你说的曾经没有我的故事 提交于 2020-01-10 10:23:41
By Abyssly Jun 20 2014 Updated:Jun 20 2014 平时工作中不可避免地要嵌套网页,对JavaScript的深入了解还是很有必要滴。而JavaScript中一个容易让人迷惑的地方就是定时器了,恐怕我们每天都在用,但我们真的足够理解吗?反正我之前只是随便用用,最近拜读了一些资料,感觉还是收获不少,在此作一个归纳。 最重要的概念 JavaScript引擎是 单线程 的。HTML5引入了Web Workers的特性,会从一定程度上突破这个限制。但话说回来,我们还是需要面对现实,认清国情。 单线程意味着,JavaScript代码并不会像线程一样被切来切去,更不会有两段代码同时执行,在同一个时刻始终只能有一段代码得到执行,各段代码依次执行下去。我们脑海中要时刻有这个概念。 定时器怎么创建 定时器并非JavaScript语言本身的特性,而是浏览器提供给我们的一个特性,它的作用是允许我们异步地将一段代码推迟一定毫秒后执行。 先看怎么用,具体来说,浏览器给了我们两个全局的方法去创建定时器: id = setTimeout(fn, delay) 初始化一个定时器,它将在指定的delay毫秒后执行传入的fn回调函数。返回一个唯一标识这个定时器的值。 id = setInterval(fn, delay) 初始化一个定时器,每隔deplay毫秒就执行传入的fn回调函数

libevent (二) 接收TCP连接

半世苍凉 提交于 2020-01-10 07:46:06
libevent 接收TCP连接 Evconnlistener 机制为您提供了侦听和接受传入的 TCP 连接的方法。下面的函数全部包含在`<event2/listener.h>`中。 evconnlistener 创建监听对象 struct evconnlistener *evconnlistener_new(struct event_base *base,evconnlistener_cb cb, void *ptr, unsigned flags, int backlog,evutil_socket_t fd); struct evconnlistener *evconnlistener_new_bind(struct event_base *base,evconnlistener_cb cb, void *ptr, unsigned flags, int backlog,const struct sockaddr *sa, int socklen); void evconnlistener_free(struct evconnlistener *lev); 两个函数都会申请空间并返回一个新的连接对象`evconnlistener`,其中第一个函数需要自己绑定套接字,而第二个函数会自动绑定套接字。`evconnlistener`根据`event_base`来判断TCP连接请求

muduo网络库源码阅读Step by Step

北城以北 提交于 2020-01-09 16:45:35
一般写服务端程序都需要有一个称手的网络库来帮我们处理琐碎的网络通信细节,比如连接的建立、关闭,读取数据,发送数据,接收、发送缓冲区的管理等,常用的C/C++网络库有libevent,asio,libev,我们项目组使用的是 muduo网络库 。muduo是 陈硕 写的,基于非阻塞IO和事件驱动的现代C++网络库,原生支持one loop per thread模型(即reactor模型),它适合开发Linux下的面向业务的多线程服务端网络应用程序。在Linux上muduo的性能(吞吐量、高并发下的事件处理效率)比其它网络库都要好,编程接口也很友好,它使用了很多Boost C++的现代特性(比如用RAII来管理资源,用function/bind来代替虚函数作为库的回调接口,借助shared_ptr实现线程安全的对象回调等),代码写得很精练简洁,而且源代码中附带有很多例子程序,是学习网络编程的很好范例,值得细细品读。 我从进项目组开始,花了6个月时间,把muduo相关的代码、例子程序、书都研究了一遍,感觉受益非浅,尤其是对处理网络通信的细节、异常处理了然于胸,写起代码来很顺溜。现在大概总结下阅读muduo网络库的顺序。 Step 0 熟悉boost智能指针、function/bind的使用 在muduo库内部使用了boost::scoped_ptr,weak_ptr,shared

Blockly开发3 -- 创建工具栏ToolBox

半腔热情 提交于 2020-01-08 20:51:16
1. 创建ToolBox 要创建一个ToolBox非常简单,只需要在定义workspace的时候进行设置即可。 var workspace = Blockly.inject(blocklyDiv, { media: 'blockly/media/', toolbox: document.getElementById('toolbox'), // 定义ToolBox }); 但在此之前,需要先定义ToolBox。ToolBox由 <xml></xml> 标签定义。下面的代码展示了如何定义一个toolbox,其中 id 属性用于查找该xml元素。 // 定义toolbox <xml id="toolbox" style="display: none;"> <block type="controls_if"></block> </xml> 2. 嵌套目录 <category> 标签可以进行嵌套实现多级目录。 <xml id="toolbox" style="display: none;"> <category name="一级目录1"> <block type="controls_if"></block> </category> <category name="一级目录2"> <category name="二级目录1"> <block type="controls_if"><

Jquery 回调对象与延迟对象

给你一囗甜甜゛ 提交于 2020-01-08 20:01:03
一、回调对象 callbacks.add() :回调列表中添加一个回调或回调的集合。 callbacks.disable() :禁用回调列表中的回调 callbacks.disabled() :确定回调列表是否已被禁用。 callbacks.empty() :从列表中删除所有的回调. callbacks.fire() :用给定的参数调用所有的回调 callbacks.fired() :访问给定的上下文和参数列表中的所有回调。 callbacks.fireWith() :访问给定的上下文和参数列表中的所有回调。 callbacks.has() :确定列表中是否提供一个回调 callbacks.lock() :锁定当前状态的回调列表。 callbacks.locked() :确定回调列表是否已被锁定。 callbacks.remove() :从回调列表中的删除一个回调或回调集合。 jQuery.Callbacks() :一个多用途的回调列表对象,提供了强大的的方式来管理回调函数列表。 二、延迟对象 deferred.always() :当Deferred(延迟)对象解决或拒绝时,调用添加处理程序。 deferred.catch() :当Deferred对象被拒绝(reject)时,调用添加的处理程序。 deferred.done() :当Deferred(延迟)对象解决时

scrapy框架

。_饼干妹妹 提交于 2020-01-08 19:37:42
一 介绍 scrapy官网链接https://docs.scrapy.org/en/latest/topics/commands.html Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。 Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下 The data flow in Scrapy is controlled by the execution engine, and goes like this: The Engine gets the initial Requests to crawl from the Spider . The Engine schedules the Requests in the Scheduler and asks for the next Requests to crawl. The Scheduler