一、异步读文件
按照JavaScript的标准,异步读取一个文本文件的代码如下:
1 | ; |
下面的例子演示了如何读取一个图片文件:
1 | ; |
按照JavaScript的标准,异步读取一个文本文件的代码如下:
1 | 'use strict'; |
下面的例子演示了如何读取一个图片文件:
1 | 'use strict'; |
process是Node.js提供的一个对象,它代表当前Node.js进程。
1 | process === global.process; //True |
Node.js 模块遵循CommonJS规范,ES6 模块与CommonJS模块的差异有以下两点
实现“模块”功能的奥妙就在于JavaScript是一种函数式编程语言,它支持闭包。如果我们把一段JavaScript代码用一个函数包装起来,这段代码的所有“全局”变量就变成了函数内部的局部变量。假如我们编写的hello.js代码是这样的:
1 | var s = 'Hello'; |
Node.js加载了hello.js后,它可以把代码包装一下,变成这样执行:
1 | (function () { |
所以,Node利用JavaScript的函数式编程的特性,轻而易举地实现了模块的隔离。 但是,模块的输出module.exports怎么实现?这个也很容易实现,Node可以先准备一个对象module:
1 | // 准备module对象: |
可见,变量module是Node在加载js文件前准备的一个变量,并将其传入加载函数,我们在hello.js中 可以直接使用变量module原因就在于它实际上是函数的一个参数:
1 | module.exports = greet; |
通过把参数module传递给load()函数,hello.js就顺利地把一个变量传递给了Node执行环境,Node会把module变量保存到某个地方。
由于Node保存了所有导入的module,当我们用require()获取module时,Node找到对应的module,把这个module的exports变量返回,这样,另一个模块就顺利拿到了模块的输出:
1 | var greet = require('./hello'); |
以上是Node实现JavaScript模块的一个简单的原理介绍。
1 | //弹出对话框并输出一段提示信息 |
\d
可以匹配一个数字,等价于[0-9]
\w
可以匹配一个单字字符 (字母、数字或者下划线) ,等价于[A-Za-z0-9_]
\W
匹配一个非单字字符,等价于[^A-Za-z0-9_]
.
可以匹配一个任意字符 ,换行符除外\s
匹配一个空白字符,包括空格、制表符、换页符和换行符\S
匹配一个非空白字符*
表示任意个字符,等价于 {0,}
+
表示至少一个字符,等价于 {1,}
?
表示0个或1个字符,等价于 {0,1}
{n}
表示n个字符{n,m}
表示n-m
个字符 \
转义 (x)
普通分组,匹配 'x'
并且记住匹配项(?<组名>RegExp)
具名组,使用$<组名>
引用具名组[xyz]
一个字符集合[^xyz]
一个反向字符集A|B
可以匹配A或B ^
表示行的开头或非的意思 $
表示行的结束