回调函数

【译】如何更好的使用javascript数组

只谈情不闲聊 提交于 2020-02-04 02:47:38
赶紧阅读读此文,我保证,在过去的几个月里我,我确定我在数组问题上犯过4次错误。于是我写下这篇文章,阅读这篇文章可以让你更准确的使用javascript数组的一些方法 使用Array.includes替代 Array.indexOf “如果你在数组中搜索某个元素,那么请使用Array.indexOf” ,我记得在学习javascript时看到过这个句子,毫无疑问,这句话很对。 MDN文档上这样描述 rray.indexOf“返回第一个被搜索到的元素的下标(索引)” ,所以如果你想要搜索某个元素的下标,那么Array.indexOf可以很好的解决。 但是,如果我们想查看一个数组中是否包涵某个元素该如何做呢。就像yes/no这样的问题,也就是布尔值。这里我们推荐使用返回布尔值的Array.includes方法。 const persons = ["jay","leinov","jj","nico"]; console.log(persons.indexOf("leinov")); // 1 console.log(persons.indexOf("beyond")); // -1 console.log(persons.includes("leinov")); // true console.log(persons.includes("beyond")); // false

如何在 JavaScript 中更好地使用数组

拟墨画扇 提交于 2020-02-04 02:47:11
使用 Array.includes 替代 Array.indexOf “如果需要在数组中查找某个元素,请使用 Array.indexOf。” 我记得在我学习 JavaScript 的课程中有类似的这么一句话。毫无疑问,这完全正确! 在 MDN 文档中,对 Array.indexOf 的描述是:返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。因此,如果在之后的代码中需要用到(给给定元素的)索引,那么 Array.indexOf 是不二之选。 然而,如果我们仅需要知道数组中是否包含给定元素呢?这意味着只是是与否的区别,这是一个布尔问题(boolean question)。针对这种情况,我建议使用直接返回布尔值的 Array.includes。 'use strict';const characters =[ 'ironman', 'black_widow', 'hulk', 'captain_america', 'hulk', 'thor',];console.log(characters.indexOf('hulk'));// 2console.log(characters.indexOf('batman'));// -1console.log(characters.includes('hulk'));// trueconsole.log(characters

JavaScript中Array的正确使用方式

落爺英雄遲暮 提交于 2020-02-04 02:46:17
在 JavaScript 中正确使用地使用 Array 的方法如下: 用 Array.includes 代替 Array.indexOf “如果你要在数组中查找元素,请使用 Array.indexOf”。 MDN 文档写道,Array.indexOf 将“返回第一次出现给定元素的索引”。因此,如果我们稍后要在代码中使用这个返回的索引,那么使用 Array.indexOf 找到索引就对了。 但是,如果我们只想知道数组是否包含某个值,该怎么办?这似乎是一个是与否的问题,或者说是一个布尔值问题。对于这种情况,建议使用返回布尔值的 Array.includes。 'use strict'; const characters = [ 'ironman', 'black_widow', 'hulk', 'captain_america', 'hulk', 'thor', ]; console.log(characters.indexOf('hulk')); // 2 console.log(characters.indexOf('batman')); // -1 console.log(characters.includes('hulk')); // true console.log(characters.includes('batman')); // false 使用 Array.find

数组 Array

心已入冬 提交于 2020-02-04 00:29:15
1.数组的概念及定义   数组:Array   定义:数组是一个有序的数据集合。 2.数组的创建方式 var arr1 = [1,2,3]; //字面量创建方式 var arr2 = new Array(1,2,3) //构造函数方式   注意:当只有一个数据时,两种创建方式的不同。   var arr1 = [5] //表示有一个数组元素5   var arr2 = new Array(5) //表示有5个数组元素,值全部为undefined 3.如何操作数组 arr.push("hello") //在数组的末尾添加元素 arr.unshift("first") //在数组的开始添加元素 arr.pop() //删除最后一位元素 arr.shift() //删除第一个元素 arr.splice(n,m,a......) //从第n个元素开始删除,删除m个,删除位置添加元素a(可选) arr.slice(n,m) //截取从第n个到第m-1个 返回到一个新数组 arr.sort(fn) //对数组进行排序,fn为一个函数,可选; //当数组内的元素为字符型数字,默认排序已经无法满足,需要手动处理; //如function fn(n,m){return n-m} 利用隐式转换将字符型转换成数值型 操作数组的一些方法 1.concat() 功能: 用于连接两个或多个数组

Event Loop事件循环,GET!

爷,独闯天下 提交于 2020-02-03 18:26:58
JS中比较让人头疼的问题之一要算异步事件了,比如我们经常要等后台返回数据后进行dom操作,又比如我们要设置一个定时器完成特定的要求。在这些同步与异步事件里,异步事件肯定是在同步事件之后的,但是异步事件之间又是怎么样的一个顺序呢,比如多个setTimeout事件又是怎么样一个执行顺序?这就涉及到事件循环:Event Loop。 JS的单线程 虽然现在的JS可以用来做多方面的开发,但是最初的JS是浏览器的专用语言,用来操作DOM。所以从诞生之初,JS就被设计成单线程语言,原因是不想让浏览器变得太复杂,因为多线程需要共享资源、且有可能修改彼此的运行结果,对于一种网页脚本语言来说,这就太复杂了。如果 JavaScript 同时有两个线程,一个线程在网页 DOM 节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?是不是还要有锁机制?所以,为了避免复杂性,JavaScript 一开始就是单线程,这已经成了这门语言的核心特征,将来也不会改变。 但是这种单线程机制却制造了另一个麻烦,假如一个操作需花费很长时间,那么此时浏览器就会一直等待这个操作完成,就会造成不好的体验。因此,JS的另一个事件就是异步事件。异步事件是专门将一些事件以队列的形式储存到浏览器的任务队列中,等同步事件执行完后再去执行,这样就避免了页面堵塞。 JavaScript 引擎怎么知道异步任务有没有结果

node.js-回调函数

可紊 提交于 2020-02-02 09:38:45
回调函数: 1、什么是回调函数? 回调函数又称为回调,将a函数作为参数传入b函数中,b函数在执行过程中根据时机或条件来决定是否调用a函数,a函数就是回调函数。 2、实现机制 定义一个回调函数(普通函数) 将回调函数的函数引用地址作为参数传递给调用者(调用者本身也是一个函数) 当特定的条件或时机发生的时候,调用者使用函数指针调用回调函数对事件进行处理 function show ( ) { console.log ( "今天天好黑哦" ) ; } setInerval ( show,1000 ) ; 回调函数的用途: 事件注册,异步函数 通常用于达到某个时机或条件时需要执行代码的情况,我们就会使用回调函数, 回调函数案例 [ { "name" : "小芳" , "age" :17 } , { "name" : "小❀" , "age" :27 } , { "name" : "小霞" , "age" :18 } , { "name" : "小王" , "age" :10 } ] < ! DOCTYPE html > < head > < meta charset = "UTF-8" > < title > 回调函数 < /title > < script src = "./jquery-3.4.1.min.js" > < /script > < /head > < body > <

IOS音视频(四十四)AVFoundation 之 Audio Queue Services

点点圈 提交于 2020-02-01 13:21:03
IOS音视频(四十四)AVFoundation 之 Audio Queue Services 1. Audio Queue Services简介 1.1 音频队列 1.1.1 音频队列架构 1.1.2 用于录音的音频队列 1.1.3 用于回放的音频队列 1. Audio Queue Services简介 Audio Queue Services,这是Core Audio的Audio Toolbox框架中的一个C编程接口。 那么什么是音频队列服务呢? Audio Queue Services提供了一种简单、低开销的方式来在iOS和Mac OS X中录制和播放音频。 音频队列服务让您记录和播放音频的任何下列格式: 线性PCM。 您正在开发的Apple平台上原生支持的任何压缩格式。 用户已安装编解码器的任何其他格式。 音频队列服务是高级的。它允许您的应用程序在不了解硬件接口的情况下使用硬件记录和回放设备(如麦克风和扬声器)。它还允许您在不了解编解码器工作原理的情况下使用复杂的编解码器。 同时,音频队列服务支持一些高级功能。它提供了细粒度的定时控制,以支持预定的回放和同步。您可以使用它来同步多个音频队列的回放,并同步音频和视频。 注意:Audio Queue Services提供的特性与之前Mac OS x中的声音管理器提供的特性类似。声音管理器在Mac OS X v10.5中是不支持的

Promise对象的resolve回调函数和reject回调函数使用

a 夏天 提交于 2020-02-01 09:04:31
Promise是ES6中用来结局回调地狱的问题的但是并不能帮我们减少代码量 Promise是一个构造函数 new Promise() 得到一个Promise一个实例 在Promise上有两个函数分别是resolve(成功之后的回调函数)和reject(失败之后的回调函数) 在Promise构造函数的prototype属性上,有一个.then()方法,也就是只要是Promise构造函数创建的实例,都可以访问到.then()方法 如果Promise表示一个异步操作,每当我们new一个Promise的实例,这个实例就表示一个具体的异步操作 既然Promise创建的实例是一个异步操作那么这个异步操作的结果只能有两种状态 状态一:异步执行成功 需要在内部调用,成功的回调函数resolve 把结果返回给调用者 状态二:异步执行失败了 需要在内部调用,成功的回调函数reject把结果返回给调用者 由于Promise的实例是一个异步操作,所以拿到操作结果后,无法使用return把操作结果返回给调用者,这个时候只能使用回调函数的形式,来把成功或者失败的结果返回给调用者 我们可以在new出来的Promise实例上,调用.then()方法【预先】为这个Promise一部操作,指定成功(resolve)和失败(reject)回调函数   实现原理:(以读取文件为例) 1 //这是一个具体的异步操作

Promise 的使用

有些话、适合烂在心里 提交于 2020-02-01 09:01:50
  Promise 的使用,用于异步处理 ,以及解决地狱回调的;   1. Promise 是一个构造函数,既然是构造函数,我们就可以 new Promise() 就可以得到一个 Promise 的实例   2. 在 Promise 上分别有两个函数,分别叫做 reslove(成功的回调函数)和 reject (失败之后的回调函数)   3. 在 Promise 的构造函数 prototype 的属性上,有一个 .then() 的方法,也就是说,只要是 Promise 的构造函数创建的实例,都可以访问 .then() 的方法   4. Promise 表示一个异步操作,每当我们 new Promise 的实例,就表示具体的异步操作   5. 既然 Promise 创建的实例是一个异步操作,那么这个异步操作只能由两种状态     5.1 状态一:异步执行成功了,需在内部调用成功的回调函数 reslove 把结果返回给调用者     5.2 状态二:异步执行失败了,需在内部调用失败的回调函数 reject 把结果返回给调用者     5.3 由于 Promise 实例,是一个异步操作,所以内部拿到操作结果后,无法使用 return 把操作结果返回给调用者,这时候只能使用 回调函数的形式,来把成功或失败的结果返回给调用者   6. 我们可以在 new 出来的 Promise 实例上,调用

JS浏览器事件循环机制

帅比萌擦擦* 提交于 2020-02-01 01:50:27
先来明白些概念性内容。 进程、线程 进程是系统分配的独立资源,是 CPU 资源分配的基本单位,进程是由一个或者多个线程组成的。 线程是进程的执行流,是CPU调度和分派的基本单位,同个进程之中的多个线程之间是共享该进程的资源的。 浏览器内核 浏览器是多进程的,浏览器每一个 tab 标签都代表一个独立的进程(也不一定,因为多个空白 tab 标签会合并成一个进程),浏览器内核(浏览器渲染进程)属于浏览器多进程中的一种。 浏览器内核有多种线程在工作。 GUI 渲染线程: 负责渲染页面,解析 HTML,CSS 构成 DOM 树等,当页面重绘或者由于某种操作引起回流都会调起该线程。 和 JS 引擎线程是互斥的,当 JS 引擎线程在工作的时候,GUI 渲染线程会被挂起,GUI 更新被放入在 JS 任务队列中,等待 JS 引擎线程空闲的时候继续执行。 JS 引擎线程: 单线程工作,负责解析运行 JavaScript 脚本。 和 GUI 渲染线程互斥,JS 运行耗时过长就会导致页面阻塞。 事件触发线程: 当事件符合触发条件被触发时,该线程会把对应的事件回调函数添加到任务队列的队尾,等待 JS 引擎处理。 定时器触发线程: 浏览器定时计数器并不是由 JS 引擎计数的,阻塞会导致计时不准确。 开启定时器触发线程来计时并触发计时,计时完成后会被添加到任务队列中,等待 JS 引擎处理。 http 请求线程: