一,
1,html 可以在浏览器直接打开运行, 是因为浏览器是 HTML 文件的解析器
而 JS 文件不能在浏览器直接运行, 是因为浏览器不支持解析 JS 文件, 需要有一个解析器来解析 JS 文件
可以下载安装 Node.JS 解析器, 并且里面自带了 NPM, 通过 node.exe 可以直接运行 JS 文件, 是通过命令行的形式运行的
要运行某个 JS 文件, 直接 node + 要运行的 JS 文件名称或者直接是 JS 代码, 按回车即可
2, 编辑器也可以直接运行, 推荐使用 webstorm
3, 在 Ecmascript 部分, node 和 JS 其实是一样的, 比如数据类型的定义, 语法结构, 内置对象
在 JS 中的顶层对象: Windows
在 node 中的顶层对象: global, 没有 Windows 这个概念
二, 模块
es6 通过 import export 来进行模块化
Node.JS 通过 require 来进行模块化
HTML 通过 script 标签来引入 JS 文件
1, 在 Node.JS 里面, 一个 JS 文件就是一个模块, 每个模块都有自己的作用域,
我们使用 var 声明的变量, 不是全局的, 而是属于当前模块下的
比如: 1.JS
- var a = 100;
- console.log(a); //100
- console.log(global.a); //undefined , 不是全局下面的变量
- global.a = 200;
- console.log(a); //100 仍然是开始定义的 100
- console.log(global.a); // 这时候才是 200
2,filename: 表示当前文件的绝对路径 dirname: 表示当前文件所在的目录的绝对路径
- console.log(filename); //E:\webstorm 文件夹 \ index.JS
- console.log(dirname); //E:\webstorm 文件夹
3, 模块路径
require(); // 可以是绝对路径, 相对路径
不能直接是 require("1.js") 这种不带./ 的, 这种加载方式, 会加载 node 中的核心模块, 或者是 node_modules 里面的慕课
4, 查找文件:
首先按照加载的模块的文件名进行查找;
如果没有找到, 则会在模块文件名称后面自动加上. JS 的后缀, 然后进行查找;
如果还没有找到, 则会在模块文件名称后面自动加上. JSON 的后缀, 然后进行查找;
如果还没有找到, 则会在模块文件名称后面自动加上. node 的后缀, 然后进行查找;
如果还没有找到, 就会报错.
5,
在一个模块中, 通过 var 定义的变量, 其作用域范围是当前模块, 外部不能够直接访问到;
如果我们想一个模块能够访问另一个模块中定义的变量, 可以通过:
把变量作为 global 对象的一个属性 (不推荐)
global.a = 100;
使用模块对象 module, 这个对象不是全局的, 而是每个模块下的对象
模块对象 module 用于: 保存提供和当前模块有关的一些信息, 下面有很多属性:
exports:{}; //module 的子对象, 通过这个对象可以把一个模块中的局部变量暴露出去, 供外部访问
因为 exports 也是一个对象, 所以暴露变量出去之前, 先声明一个 key 值, value 值就是这个局部变量
- var a = 100;
- module.exports.name = a;
- require(); // 返回值就是 module.exports 对象
6, 在模块作用域下, 还有一个内置的模块对象, exports, 它其实就是 module.exports
所以:
module.exports.name = a; 可以写成 exports.name = a;
[注意] : 不要这样操作
module.exports = [1,2,3]
也不要: exports = [1,2,3], 只是追加属性, 不要修改
三, global 对象
来源: http://www.bubuko.com/infodetail-2928121.html