1.arguments: 在函数调用时, 会自动在该函数内部生成一个名为 arguments的隐藏对象。 该对象类似于数组, 但又不是数组,而是Object对象。可以使用[]获取函数调用时传递的实参。
2.当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。
由于arguments在函数被调用时才有效,因此arguments.callee在函数未调用时是不存在的(即null.callee),且引用它会产生异常。
3.arguments.length 是实参长度,arguments.callee.length 是形参长度,由此可以判断调用时形参长度是否和实参长度一致。
1.node特征
node.js -----本质就是javascript
-----文件也就是 .js
js 客户端
node.js 服务端 报错优先
node 针对文件进行修改后,需要重新运行文件
node 运行文件 可以省略后缀 .js 但是必须有文件名
退出:C+C
运行文件指令:node 文件路径
优点:
- 异步非阻塞的I/O
- 特别适用于I/O密集应用
- 事件循环机制
- 单线程
- 跨平台
一次请求一次响应
注意:node没有window对象,也就意味着不能使用 $ window的方法
2.commonjs模块化
1、模块化:将一个大的功能拆分为一个个小的模块,通过不同模块的组合来实现一个大功能
2、commonjs:cjs 模块化系统
通过 require()函数 引用不同的模块,接受的值为对象
模块分2种:外部模块 ---- (自定义模块)非node.js自带模块
内部模块 ---- node.js自带模块(引用时不需要写路径)
在node_modules里面的模块通过require方法调用的时候,不需要写路径
exports----暴露
require----引入
module-----模块
__filename----返回当前模块文件被解析过后的绝对路径
__dirname----返回当前模块文件解析过后所在的文件夹(目录)的绝对路径
3、
在node中一个js文件就是一个模块
在node中每一个模块中的代码都是运行在一个独立的函数中的
验证:console.log(arguments.callee.toString());
1、(不推荐)内部的变量和方法 需要通过exports.name=xxx 直接导出
2、(推荐) moudle.exports.name = {}
全局定义变量 通过global关键字 global.name = xxx 不推荐使用
3.npm
下载 npm install xxx ----缩写 npm i xxx
卸载 npm uninstall xxx
npm 包管理工具
npm init 初始化包管理
npm i 安装package.json所带的依赖包
npm install xxx@版本号 -S-D 下载特定的版本
—save ------ -S 生产依赖
—dve ------ -D 开发依赖
-g 全局安装
npm search / s 包名
搜索指定的包
npm install / i 包名
安装指定的包
npm install / i 包名 --save
安装指定包并添加到项目的生产依赖中
npm install / i 包名 --save-dev
安装指定包并添加到项目的开发依赖中
npm install / i 包名 -g
全局安装(全局安装都是安装一些工具)
npm install / i
安装项目中的所有依赖
npm remove / r 包名
删除指定的包
4.yarn
yarn 更快更稳
yarn add xxx 下载包
yarn global 全局安装
yarn --version
yarn init //生成package.json !!!注意生成的包名不能有中文,大写
yarn global package (全局安装)
yarn add package (局部安装)
yarn add package --dev (相当于npm中的–save-dev)
yarn remove package
yarn list //列出已经安装的包名
yarn info packageName //获取包的有关信息
yarn //安装package.json中的所有依赖
后缀 -lock.json 为npm、yarn安装包的产物
3个buffer 为一个中文
5.三大系统
fs 文件系统
path 路径系统
- path.join() ------ 返回由特定分隔符把全部给定的path片段连接到一起并规范化生成的路径
- path.resolve ------ 把一个或多个路径片段的序列解析为一个绝对路径
http 服务器系统
引用 require
打开 open
读取 readFile
readFileSync
写入 writeFile
wrirteFileSync
关闭 close
// 引用
let fs = require('fs')
文件写入
同步方法:fs.writeFileSync(file, data[, options])
fs.writeFileSync('../a.txt', '我是被node添加的文件a')
异步方法:fs.writeFile(file, data[, options], callback)
console.log(1);
fs.writeFile('../b.txt', '我是被node添加的文件b1', function () {
console.log('写入成功1');
fs.writeFile('../b.txt', '我是被node添加的文件b2',{flag:'a'}, function () {
console.log('写入成功2');
})
})
console.log(2);
var ws = fs.createWriteStream('../b.txt',{flags:'w'});
ws.once('open', function (error,data) {
if (error) {
console.log(error);
}
console.log(data);
})
// 创建服务器
const http = require('http')
// req---request 请求 res---response 响应
const server = http.createServer((req, res) => {
// 响应头-----发送浏览器 解析
res.writeHead(200,{'Content-Type':'text/javascript; charset=utf-8'})
// 发送响应头
res.end('我是老蔡12123')
})
// 监听是否成功 8000: 为端口
server.listen(8000, function () {
console.log('服务器创建成功');
})