阮一峰 JavaScript 教程
JavaScript 的基本语法 语句 基本语法 - 32 - 本文档使用 书栈(BookStack.CN) 构建 行。一般情况下,每一行就是一个语句。 语句(statement)是为了完成某种任务而进行的操作,比如下面就 是一行赋值语句。 1. var a = 1 + 3; 这条语句先用 var 命令,声明了变量 a ,然后将 1 + 3 的运算结果 赋值给变量 a 。 1 JavaScript还有一个三元运算符(即该运算符需要三个运算 子) ?: ,也可以用于逻辑判断。 1. (条件) ? 表达式1 : 表达式2 上面代码中,如果“条件”为 true ,则返回“表达式1”的值,否则返 回“表达式2”的值。 1. var even = (n % 2 === 0) ? true : false; 上面代码中,如果 n 可以被2整除,则 even 等于 true ,否则等 于 连续做25次平方,由于最后结果太接近0,超出 了可表示的范围,JavaScript 就直接将其转为0。 JavaScript 提供 Number 对象的 MAX_VALUE 和 MIN_VALUE 属性,返 回可以表示的具体的最大值和最小值。 1. Number.MAX_VALUE // 1.7976931348623157e+308 2. Number.MIN_VALUE // 5e-324 JavaScript0 码力 | 540 页 | 3.32 MB | 10 月前3阮一峰 《ECMAScript 6入门》 第三版
typeof 反而不会报错。 typeof undeclared_variable // "undefined" 上面代码中, undeclared_variable 是一个不存在的变量名,结果返 回“undefined”。所以,在没有 let 之前, typeof 运算符是百分之百安全的,永 远不会报错。现在这一点不成立了。这样的设计是为了让大家养成良好的编程习 惯,变量一定要在声明之后使用,否则就报错。 函数里面的 this ,如果函数不是作为对象的方法运行,而是单纯作为函数运 行, this 会指向顶层对象。但是,严格模式下,这时 this 会返 let 和 const 命令 42 回 undefined 。 不管是严格模式,还是普通模式, new Function('return this')() ,总 是会返回全局对象。但是,如果浏览器用了CSP(Content Security const square = n => n * n; 上面代码只用了两行,就定义了两个简单的工具函数。如果不用箭头函数,可能就 要占用多行,而且还不如现在这样写醒目。 箭头函数的一个用处是简化回调函数。 函数的扩展 146 // 正常函数写法 [1,2,3].map(function (x) { return x * x; }); // 箭头函数写法 [1,2,3].map(x0 码力 | 679 页 | 2.66 MB | 1 年前3廖雪峰JavaScript教程
。如果你遇到ECMAScript这个词,简单把它替换为 JavaScript就行了。 JavaScript语言是在10天时间内设计出来的,虽然语言的设计者水平非常NB,但谁也架不住“时间 紧,任务重”,所以,JavaScript有很多设计缺陷,我们后面会慢慢讲到。 此外,由于JavaScript的标准——ECMAScript在不断发展,最新版ECMAScript 6标准(简称ES6) 已 打开新浪首页,然后查看页面源代码,找一找引入的JavaScript文件和直接编写在页面中的 JavaScript代码。然后在Chrome中打开开发者工具,在控制台输入 console.log('Hello'); ,回 车查看JavaScript代码执行结果。 原文: https://wizardforcel.gitbooks.io/liaoxuefeng/content/js/3.html 练习 2 快速入门 的形式访问一个属性了。 实际上JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。 如果访问一个不存在的属性会返回什么呢?JavaScript规定,访问不存在的属性不报错,而是返 回 undefined : 1. var xiaoming = { 2. name: '小明' 3. }; 4. xiaoming.age; // undefined 由于JavaS0 码力 | 264 页 | 2.81 MB | 10 月前32019-2021 美团技术年货 前端篇
框架注册 VSync 回调之后,通过 C++ 侧的 VsyncWaiter 类等待 VSync 前端 < 5 信号,后者通过 JNI 等一系列调用,最终 Java 侧的 VsyncWaiter 类调用 Android SDK 的 Choreographer.postFrameCallback 方 法, 再 通 过 JNI 一 层 层 传 回 Flutter 引擎消费掉此回调。Java 侧的 iOS Grand Central Dispatch 的线程 API,模拟出 VSync 的信号触发 与回调: @Override public void asyncWaitForVsync(long cookie) { // 模拟每秒 60 帧的屏幕刷新间隔:向主线程发送一个异步任务 , 16ms 后调用 applicationContext.getUITaskDispatcher() // 创建一个用于管理 Surface 的容器组件 SurfaceProvider surfaceProvider = new SurfaceProvider(context); // 注册视图创建回调 surfaceProvider.getSurfaceOps().get().addCallback(surfaceCallback); // ... 在 surfaceCallback 中 @Override0 码力 | 738 页 | 50.29 MB | 1 年前3新语⾔,新思维 解读⼀个并发问题的多种实现 - 陶召胜
next: 异步编程的问题 变量量读写冲突 异步任务1 异步任务2 共享变量量 读、写 读、写 IO阻塞 回调地狱 Future也有不不⾜足 • get 很容易易导致另⼀一个对象阻塞 • 不不⽀支持多值、⾼高级错误处理理 next: 多任务求解1-10,000,000的和 序号 语⾔言 关键点 1 JavaScript 不不再有回调地狱,变异步为顺序化思维,程序更更加可读 2 Java (1)fork/join (2)CompletableFuture (3)反应式编程(Reactive Programming ) next: JavaScript 关键点:不不再有回调地狱,变异步为顺序化思维,程序更更加可读 2010年年 ECMAScript 5 2015年年 ECMAScript 6 2017年年 ECMAScript 2017 单线程事件循环 (2)AKKA:分布式计算框架 2014年年 Scala2.11 2016年年 Scala2.12 2017年年 Scala2.12.4 创建异步任务就是这么简洁 异步任务之间的连续处理理也是这么简洁 例例⼦子Scala实现 对⽐比:Java8 CompletableFuture实现 AKKA分布式计算框架 • 核⼼心概念:Actor,是⾏行行为和状态的容器器0 码力 | 42 页 | 9.85 MB | 1 年前3JavaScript Promise迷你书(中文版)
它是基于并列/并行处理设计的一种编程语言。 现在JavaScript也拥有了这种特性,这就是本书所介绍的JavaScript Promise。 另外,如果说到基于JavaScript的异步处理,我想大多数都会想到利用回调函数。 使用了回调函数的异步处理 ---- getAsync("fileA.txt", function(error, result){ if(error){// 取得失败时的处理 throw JavaScript Promise 迷你书(中文版) 6 // 取得成功时的处理 }); ---- <1> 传给回调函数的参数为(error对象, 执行结果)组合 Node.js等则规定在JavaScript的回调函数的第一个参数为 Error 对象,这也是它的一个 惯例。 像上面这样基于回调函数的异步处理如果统一参数使用规则的话,写法也会很明了。 但是,这也仅是编码规约而已,即使采用不同的写法也不会出错。 注册这个promise对象执行成功 时和失败时相应的回调函数。 这和回调函数方式相比有哪些不同之处呢? 在使用promise进行一步处理的时候,我们 必须按照接口规定的方法编写处理代码。 也就是说,除promise对象规定的方法(这里的 then 或 catch )以外的方法都是不可以使 用的, 而不会像回调函数方式那样可以自己自由的定义回调函数的参数,而必须严格 遵守固定、统一的编程方式来编写代码。0 码力 | 112 页 | 1010.02 KB | 1 年前3JavaScript 正则表达式迷你书 老姚 - v1.1
情,还是做不到的。 比如匹配这样的字符串:1010010001…。 虽然很有规律,但是只靠正则就是无能为力。 6.2.2. 是否有必要使用正则? 要认识到正则的局限,不要去研究根本无法完成的任务。同时,也不能走入另一个极端:无所不用正则。能 用字符串 API 解决的简单问题,就不该正则出马。 比如,从日期中提取出年月日,虽然可以使用正则: JavaScript 正则表达式迷你书 6 = 替换成 =2+3=5=,其中,$& 匹配的是 =, $` 匹配的是 2+3,$' 匹配的是 5。因此使用 "$&$`$&$'$&" 便达成了 目的。 当第二个参数是函数时,我们需要注意该回调函数的参数具体是什么: "1234 2345 3456".replace(/(\d)\d{2}(\d)/g, function (match, $1, $2, index, input) { console.log( utils.isArray([1, 2, 3]) ); // => true 7.3.3. if 语句中使用正则替代 && 比如,模拟 ready 函数,即加载完毕后再执行回调(不兼容 IE 的): JavaScript 正则表达式迷你书 7. 第七章 正则表达式编程 | 第 73 页 var readyRE = /complete|loaded|interactive/;0 码力 | 89 页 | 3.42 MB | 10 月前3JavaScript 正则表达式迷你书 老姚 - v1.0
情,还是做不到的。 比如匹配这样的字符串:1010010001…. 虽然很有规律,但是只靠正则就是无能为力。 6.2.2. 是否有必要使用正则? 要认识到正则的局限,不要去研究根本无法完成的任务。同时,也不能走入另一个极端:无所不用正则。能 用字符串 API 解决的简单问题,就不该正则出马。 比如,从日期中提取出年月日,虽然可以使用正则: JavaScript 正则表达式迷你书 6 = 替换成 =2+3=5=,其中,$& 匹配的是 =, $` 匹配的是 2+3,$' 匹配的是 5。因此使用 "$&$`$&$'$&" 便达成了 目的。 当第二个参数是函数时,我们需要注意该回调函数的参数具体是什么: "1234 2345 3456".replace(/(\d)\d{2}(\d)/g, function (match, $1, $2, index, input) { console.log( utils.isArray([1, 2, 3]) ); // => true 7.3.3. if 语句中使用正则替代 && 比如,模拟 ready 函数,即加载完毕后再执行回调(不兼容 IE 的): JavaScript 正则表达式迷你书 7. 第七章 正则表达式编程 | 第 73 页 var readyRE = /complete|loaded|interactive/;0 码力 | 89 页 | 3.42 MB | 10 月前3在 JavaScript 中的并行语言特性-周爱民
instance 结构化 函数式 ⾯面向对象 并⾏行行 动态 thenabled object async* top level - await import() asyncIterator 任务队列列 执⾏行行栈 runnning execution context execution context stack PromiseJobs or ScriptJobs a b ... 创建⼀一个新的Promise px,其resolve/ reject函数对将⽤用作参数调⽤用p.then()。 即Promise.resolve(p)。 为px创建⼀一对新的onFulfilled/onRjected 响应函数,使[[asyncContext]]指向当前 栈顶执⾏行行上下⽂文。 3 将响应函数onXX作参数调⽤用px.then(), 使onXX函数添加到Jobs队列列。 4 将当前执⾏行行上下⽂文从栈顶移除。 创建⼀一个新的Promise px,其resolve/ reject函数对将⽤用作参数调⽤用p.then()。 即Promise.resolve(p)。 为px创建⼀一对新的onFulfilled/onRjected 响应函数,使[[asyncContext]]指向当前 栈顶执⾏行行上下⽂文。 3 将响应函数onXX作参数调⽤用px.then(), 使onXX函数添加到Jobs队列列。 4 将当前执⾏行行上下⽂文从栈顶移除。0 码力 | 41 页 | 8.61 MB | 1 年前3Hello 算法 1.1.0 JavaScript版
能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 求和函数的递归过程 虽然从计算角度看,迭代与递归可以得到相同的结果,但它们代表了两种完全不同的思考和解决问题的范 式。 ‧ 迭代:“自下而上”地解决问题。从最基础的步骤开始,然后不断重复或累加这些步骤,直到任务完成。 ‧ 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 迭代 递归 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 适用于子问题分解,如树、图、分治、回溯等,代码结构简洁、 清晰 Tip 如果感觉以下内容理解困难,可以在读完“栈”章节后再来复习。 那么,迭代和递归具有什么内在联0 码力 | 379 页 | 18.46 MB | 1 年前3
共 21 条
- 1
- 2
- 3