回调函数

编码规范

倖福魔咒の 提交于 2019-11-28 15:16:20
1,资源管理器中,除脚本组件名首字母大写外,其余资源名称统一小写. 2,层级管理器中的节点命名,资源管理器中的资源名称,项目名称,项目所在路径名称. 都不可以出现中文. 3,代码中的变量名,函数名,统一使用小驼峰命名规则,除特殊需要,否则不要使用下划线. 比如定义一个按钮节点的引用: buttonStart:cc.Node 比如定义一个类的成员函数: onButtonClicked(){ } 4,函数命名尽量以动词或介词作为前缀,回调函数通常以on做前缀或handle做后缀, 尽可能做到见名知意. 比如触摸开始事件的回调函数可命名为onTouchStart 比如按钮的点击回调函数可命名为:onButtonClicked 5,函数注释统一采用多行注释,比如定义一个定义一个查找质数的函数, 变量初始化或函数内部代码段注释使用单行注释 /* statement 判断质数 //函数功能说明 @parm (Number) num //参数说明 @return (Boolean) //返回类型说明 */ checkPrimeNumber(num){ //默认不是质数 let isPrimeNubmer = false; . . . return isPrimeNubmer; } 6,运算符前后统一留一个空格. 7,统一使用tab键进行缩进,或者利用编辑器的自动格式化代码功能,

event loop一篇文章足矣

自闭症网瘾萝莉.ら 提交于 2019-11-28 15:03:32
event loop 浏览器内核是多线程, Javascript 是单线程。 楼主之前讲解了 js 的异步处理,只是讲解了异步处理的方法,但是对于异步处理的原理还是不是很了解,这篇文章是对于浏览器的线程方面对 JavaScript 的运行机制进行分析。 1:浏览器基本 我们经常说, js 的执行环境是一个单线程,会按顺序执行代码,但是 JavaScript 又是可以异步,这两者感觉有冲突,但是本质上,如果理解浏览器的事件循环机制(event loop),就会觉得并不冲突。 浏览器里面不仅只有解释 JavaScript 的引擎,还包括很多其它的引擎。 浏览器机制.png 浏览器主要包括: 用户界面:包括地址栏、前进/后退按钮、书签菜单等。除了浏览器主窗口显示的您请求的页面外,其他显示的各个部分都属于用户界面。 浏览器引擎(浏览器内核): 在用户界面和呈现引擎之间传送指令。 呈现引擎 - 负责显示请求的内容。如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上。 网络 - 用于网络调用,比如 HTTP 请求。其接口与平台无关,并为所有平台提供底层实现。 用户界面后端 - 用于绘制基本的窗口小部件,比如组合框和窗口。其公开了与平台无关的通用接口,而在底层使用操作系统的用户界面方法。 JavaScript 解释器。用于解析和执行

Generator ∕ yield 与 async ∕ await

给你一囗甜甜゛ 提交于 2019-11-28 14:58:38
原文引用 大专栏 https://www.dazhuanlan.com/2019/08/26/5d6340cf158ef/ 异步编程对JS的重要性应该是不言而喻了的,作为单线程的编程语言,如果没有异步编程,体验不要太酸爽 比如我们有一个读取文档并进行处理的任务。如果有异步编程,先是向操作系统发出请求,要求读取文档。然后,进程会去执行其他任务,等到操作系统返回文档,再接着处理文档的任务 相反的,如果没有异步函数,上述编程就变成了同步的执行方式。由于是连续执行,不能插入其他任务,所以操作系统从硬盘读取文档的这段时间,进程只能干等着 Promise 从 Promise 开始,JavaScript 就在引入新功能来实现更简单的方法处理异步编程,帮助我们远离回调地狱 回调地狱也就是多个回调函数嵌套带来的问题。比如读取文档A之后,再读取文档B fs.readFile(fileA, function (err, data) { fs.readFile(fileB, function (err, data) { // ... }) }) 很明显,在读取多个文档的情况下,代码就会出现多重嵌套 一个很明显的特点是, 代码不是纵向发展,而是横向发展的 ,造成的结果是代码混乱,无法管理 为了解决这个问题,就出现了 Promise 注意, 它不是新的语法功能,而是一种新的写法 ,这里就不具体介绍它的实现了

ScrapySpider的使用

故事扮演 提交于 2019-11-28 13:48:23
设置控制台打印的Log等级 # setings文件 # 设置只打印warning以上等级的日志信息 LOG_LEVEL = 'WARNING' 在在爬虫主文件写爬取代码,使用scrapy.Request请求。 # baiduSpider.py文件 import scrapy from spiderDM.items import SpiderdmItem class BaiduspiderSpider(scrapy.Spider): name = 'baiduSpider' allowed_domains = ['www.baidu.com'] # start_urls = ['http://www.baidu.com/'] # 和start_urls功能相似,是程序开始执行的方法。 def start_requests(self): url = "http://www.baidu.com" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36" } cookies = { "cookie": "_zap=14ce0193-6056-4233-a292

回调函数

╄→尐↘猪︶ㄣ 提交于 2019-11-28 13:14:33
回调函数 回调函数基本介绍 所谓回调函数,通俗的来讲,就是指将一个函数作为参数传递给另外一个函数,然后在另外一个函数里面执行传递过去的函数,我们来看-个具体的示例。 常见回调函数基本介绍 filter: filter是过滤的意思, 所以这个方法会返回一个数组,数组里面是返回true的元素 some():对数组的每一项运行指定的函数,如果该函数只要有一项返回true则返回true filter: filter是过滤的意思, 所以这个方法会返回一个数组,数组里面是返回true的元素 map():对数组的每-项运行test函数, 返回一个数组,这个数组是每次调用函数后的运行结果。 归并方法(扩展) 归并方法有两个,reduce()和reduceRight(), -个是从数组第一项开始, 另外-个是从数组最后一项开始,两个方法都会迭代数组所有的项,然后构建一个最 终的返回值。这两个方法都接受两个参数: 一个在每一项调用的函数和一个可选的初始值。reduce0是从左往右进行归并,reduceRight0是从右往左开始归并 。 链式调用 所谓链式调用,就是可以像链条一样一直调用方法。 其实链式调用的原理也非常简单,在调用方法时,方法里面会返回-一个对象,然后这个对象又可以调用方法。 对象 对象概述 JavaScript埋面的对象就是一组键值 对的集合。这些键一般由字符串构成

js中对同步和异步的理解

喜欢而已 提交于 2019-11-28 09:00:48
你应该知道,javascript语言是一门“ 单线程 ”的语言,不像java语言,类继承Thread再来个thread.start就可以开辟一个线程,所以,javascript就像一条流水线,仅仅是一条流水线而已,要么加工,要么包装,不能同时进行多个任务和流程。 那么这里说的同步和异步到底是什么呢?如果你真的不懂,我希望你认真读完这篇文章。其实我个人觉得js官方的文档在使用两个词的时候并不准确,包括很多其他词汇,都只是听起来高深,但实际应用好像跟这些词没半毛钱关系。例如“事件委托”这个词,不知道的人乍一看谁又能说出“事件委托”是什么意思?委托什么事件?怎么个委托,我看不如干脆就叫“事件在外层元素中的捕获”,虽然长一点,一下就能看懂。 回归正轨,“同步”——一下就让人想到“一起”这个词;“异步”呢,从字面来讲,好像是在不同的(异)的ways上do something,那首先想到的词可能是“一边...一边...”,比如‘小明一边吃雪糕一边写作业’,这完全没毛病,雪糕吃完了,作业也写完了,这就是异步?那就大错特错了! 其实同步和异步,无论如何,做事情的时候都是只有一条流水线(单线程), 同步和异步的差别就在于这条流水线上各个流程的执行顺序不同 。 最基础的异步是setTimeout和setInterval函数,很常见,但是很少人有人知道其实这就是异步,因为它们可以控制js的执行顺序

jQuery动画效果

本秂侑毒 提交于 2019-11-28 08:36:04
show显示动画 方式一:无参数,表示让指定的元素直接显示出来,底层是通过display:block实现的,这就是说,要显示的元素一开始不能是隐藏的 $(选择器).show(); 方式二:通过控制元素的宽高、透明度、display属性,逐渐显示,例如:3秒后显示完毕。 $(选择器).show(speed); ​ 方式三:和方式二类似,也是通过控制元素的宽高、透明度、display属性,逐渐显示。 $(选择器).show("slow"); 其中slow:600ms normal:400ms fast:200ms 方式四:动画执行完后,立即执行回调函数。 $(选择器).show("slow",func(){}) ​ 四种方式的功能是一样的:参数可以有两个,第一个是动画的执行时长,第二个是动画结束后执行的回调函数。 hide隐藏动画 与show的用法相对应 $(selector).hide(); ​ $(selector).hide(speed); ​ $(selector).hide("slow"); ​ $(selector).hide(speed, function(){}); ​ 注意$('div').stop()的使用。作用:程序暂停当前的步骤(如果当前步骤没有全完执行完,也暂停),继续后面的步骤,直到结束 【实例】实现点击按钮显示盒子,再点击按钮隐藏盒子 1 <

并发编程(线程与进程)

雨燕双飞 提交于 2019-11-28 08:23:19
进程与线程的并发 在讲并发之前,我们需要了解几个概念:什么是串行、并发、并行? 串行:完整执行完一个程序再执行下一个 并发:程序之间看起来是同时运行的 并行:真正做到了同时运行 除此之外, 多道技术 里有两点需要我们关注一下(括号内的为扩展内容): 空间复用:多进程共用内存条(分块->分页->分段+分页),但是都有自己独立的内存空间(基址寄存器、地址的动态重定位),互不干扰,物理隔离。 时间复用:共用一个CPU(分时系统) 备用知识: 进程以及线程有五种状态:新建 (New)、就绪(Ready)、运行(Running)、阻塞(Blocked) 和死亡(Dead) 进程 我们把一个正在运行的程序叫做 进程 ,那么我们就正式用代码来学习进程的并发吧! 开启子进程的两种方式: 通过指定函数作为target,创建Process对象来生成新进程 from multiprocessing import Process import time def task(): print('进程 start') time.sleep(2) print('进程 end') if __name__ == '__main__': p = Process(target=task) p.start() # 向操作系统发送开子进程请求,具体什么时候开,开多长时间只和操作系统有关。 time.sleep(5)

数组的拓展方法

烈酒焚心 提交于 2019-11-28 07:17:06
1. .indexOf(element) / .lastIndexOf(element) 这两个方法用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索 var a = [1,2,3,6,2,7,4] console.log(a.indexOf(2)) // 1 正数第一个2 console.log(a.indexOf(8)) //-1 数组中没有那个元素 console.log(a.lastIndexOf(2)) // 4 倒数第一个2 console.log(a.lastIndexOf(8)) //-1 数组中没有那个元素 2. .forEach(element, index, array) 遍历数组,参数为一个回调函数,回调函数有三个参数: 当前元素 当前元素索引值 整个数组 var arr = new Array(1, 2, 3, 4); arr.forEach(function(e,i,array){ array[i]= e + 1; //每项加1 }); console.log(arr); //[2, 3, 4, 5,] 3. .map(function(element)) 与forEach类似,遍历数组, 回调函数返回值组成一个新数组返回 ,新数组索引结构和原数组一致, 原数组不变 var