随堂笔记——Node.js Day1
ES6
(1)块级作用域
let a=1;
不进行提升优化的let声明,在同一作用域内不得重复声明同一变量;禁止在同一作用域内声明相同名称的变量。
let n1 = 5;//不存在提升
console.log(n1);
*/
let n2 = 6;
//let n2 = 7;在同一个作用域下不允许重复声明同一变量
console.log(n2);
两个大括号之间的代码段构成了一个块级作用域区域。请注意,在编程逻辑中使用如if语句、else判断、while循环、do-while循环以及for循环等关键字时所处的位置都属于这一区域。在这样的结构下,默认情况下所有的ley(local external variable)和const(constant)声明都是局部变量性质的定义,并且这些变量仅限于当前作用域内部使用范围之内
var、let、const三者的区别主要体现在它们在函数或模块内部对被定义变量的作用范围以及是否允许同名变量多重定义上的差异。
具体而言:
var声明的方式具有即时性特点,在同一作用域内允许同名变量多次被定义。
let声明的方式不具备即时性特点,在同一作用域内禁止同名变量的重复使用,并且引入了块级作用域机制。
- 注意到的是,在全局作用域中进行let声明所得出的变量并非真正的全局可见。
- const关键字必须附带有初始值,并且无法进行多次赋值操作以避免数据覆盖问题。
练习:计算1——100之间的所有整数和,使用let声明变量
let sum=0;
for(let i=1;i<=100;i++){
sum +=i;
}
console.log(sum);
(2)参数增强
可以给函数的参数设置默认值
function fn(a,b,c=0){
//c = c || 0;//es6之前的默认值
}
fn(20000,1000)//没有出现的实参就会使用默认值
(3)箭头函数
()=>{ }
简化了匿名函数的写法,不等价于匿名函数
sort((a,b)=>{
return a-b;
})
如果箭头函数的函数体中只有一行代码并且是return形式,可以简化为 sort((a,b)=>a-b);
var arr = [23,9,78,6,45];
//arr.sort((a,b)=>{
//return a-b;
//});
//箭头函数的函数体中只有一行代码,并且是return形式
arr.sort((a,b)=>a-b);
console.log(arr);
练习:通过编写代码实现如何在原有代码中替换之前的匿名函数为arrow function表示的具体方法?具体步骤包括生成一个新函数来接收三个数字作为输入参数,并计算它们的平均值后输出结果
//let add = (a,b,c)=>{
// return (a+b+c)/3;
//}
let add = (a,b,c) =>(a+b+c)/3;
console.log(add(8,6,10));
(4)模板字符串
解决了字符串的拼接问题
模板字符串 ${JS表达式}
在练习中定义变量来记录一位员工的信息时,请注意该对象应包含标识号、姓名、性别标记(二进制编码)以及工资字段;然后请输出该对象的结构。
编号:x
姓名:xx
性别:男./女
工资:xxxx.00元
自己写的
var id= 01;
var name = '丽丽';
var sex = 0;
var salary = 7800;
console.log(`
编号:${id}
姓名:${name}
性别:${sex === 1 ? '男' : '女'}
工资:${salary}
`);
老师的答案
var emp = {
eid:2,
ename:'涛',
sex:1,
salary:50000
};
console.log(`
编号:${emp.eid}
姓名:${emp.ename}
性别:${emp.sex === 1 ? '男' : '女'}
工资:${emp.salary.toFixed(2)}元//小数点后两位
`);
1.Node.js概述
Node.js是运行在服务器端的JS解释器,基于谷歌的V8引擎。
(1)对比JS
JavaScript执行于客户端浏览器中,并非单一环境;这导致开发过程中可能出现不同环境下运行结果不一致的问题(即代码兼容性问题)。相比之下,在Node.js环境中由于采用了单一的V8引擎实现JavaScript执行机制(即通过单一的JavaScript解释器),因此不会出现上述的问题。
JS和Node.js都有共同的ES(内置)对象和自定义对象,不同的宿主对象
JavaScript被用来构建浏览器界面的交互效果;Node.js被采用在服务器端开发中;例如对数据库的访问;其他服务系统的调用。
(2)网址
www.nodejs.cn 中文镜像
(3)使用Node,js
脚本模式
node 拖拽脚本文件 回车
交互模式
node 回车 进入交互模式
两次ctrl+c或者ctrl+d
(4)特点
Node.js采用单线程运行机制,并能够处理数千个并行连接。适用于构建基于社交网络的大规模Web应用;不适于处理CPU密集型的任务。
2.全局对象
(1)global
检测一个变量或函数是否为全局的
交互模式属于全局作用域,创建的函数和声明的变量是全局的
请完成以下练习题:编写源代码文件03_global.js,在该源代码文件中定义变量名称并开发函数模块。首先利用global属性检查该变量是否属于全局作用域。
var a=1;
function fn(){
return 2;
}
console.log(global.a);
console.log(global.fn());
每个脚本文件都在各自的独立作用域内运行,在这种情况下内部函数和变量仅限于当前作用域使用
这样的设计确保不会产生全局变量问题
在JavaScript中使用global关键字时,默认引用的是window对象
这种机制保证了每个脚本文件都能独立管理自己的数据资源
练习 生成04_window.js文件和04.html文件,并将JavaScript代码嵌入到HTML文档中。定义变量用于存储窗口信息,并编写函数逻辑以实现特定功能。最后检查该窗口是否属于全局窗口状态。
(2)console
console.log("记录信息");//记录信息
console.info("信息提示");//信息提示
console.warn("警告提示");//警告提示
console.error("错误报告");//错误报告console.time()//开始执行计时操作
console.timeEnd()//完成执行计时操作
必须确保开始与结束操作使用相同的参数
练习:分别查看for,while,do-while三种循环分别循环100000次的耗时
//开始计时
console.time('tao');
for(let i=1;i<=10000;i++){
}
//结束计时
console.timeEnd('tao');
console.time('while');
let j=1;
while(j<=100000){
j++;
}
console.timeEnd('while');
console.time('dowhile');
let k=1;
do{
k++;
}while(k<=100000);
console.timeEnd('dowhile');
(3)process
进程:计算机让的软件运行都是代表相应的进程
process.arch 查看当前CPU架构
process.platform 查看当前操作系统
process.version 查看当前Node.js版本
process.pid 查看当前Node.js进程的编号
process.kill(进程编号) 结束指代编号的进程
(4)Buffer
缓冲器 :在内存临时存储数据的区域,常用于保存网络传输时的资源
let buf = Buffer.alloc(9,'abc涛桑');//一个汉字占3个字节
let buf = Buffer.alloc(5,'abcde');//创建Buffer,大小为5个字节
buf.toString() //将Buffer数据转为字符串
//创建Buffer
let buf = Buffer.alloc(9,'abc涛桑');//一个汉字占3个字节
console.log(buf);
//将buffer转为字符串
console.log(buf.toString());
3.定时器
一次性定时器
开启
var timer = setTimeout(回调函数,间隔时间)
当间隔时间到了,调用一次回调函数
清除
clearTimeout(timer)

4.模块
这是一个独立的功能块, 该模块能够被其他模块集成, 也可用于集成其他不同的功能块
require() 用于引入其他的模块
module.exports() 是一个空对象,用于存放导出的内容
课后任务
构建主模块(main.js)与功能模块(circle.js),从功能模块中导出两个函数并传递半径参数。计算并返回周长与面积值,在主模块引入成功时调用这两个函数进行计算。
//main.js
var obj = require('./circle.js');
console.log(obj);
console.log(obj.len(),obj.ar());
//circle.js
const pi=3.14;
var r=2;
function length(){
return r*2*pi;
}
function area(){
return r*r*pi;
}
module.exports = {
len:length,
ar:area
}
老师的答案
//main.js
let circle = require('./circle.js');
console.log(circle);
console.log(circle.myArea(5).toFixed(2),circle.myLen(5).toFixed(2));//输出结果,保留小数点后两位
//circle.js
function area(r){
return Math.PI * Math.pow(r,2);
}
function len(r){
return 2*Math.PI*r;
}
//导出
module.exports = {
myArea:area,
myLen:len
};
