JS复习练习题目、完整nodejs项目以及Commons、Es

### JS复习练习

- ![20250220204925](/up-z0.qiniup.com20250220204925.png)

1. 任务1:创建一个简单的问候函数

- 编写一个函数greet,接受一个名字作为参数,并返回一个问候语,例如:“Hello, [名字]! Welcome to JavaScript.”。

```js

function greet(name){

    return `Hello,${name}! Welcome to JavaScript`

}

console.log('===============创建简单的问候函数 =================');

console.log(greet('李华'));

```

2. 任务2:计算数组的平均值

- 编写一个函数calculateAverage,接受一个数字数组作为参数,并返回数组的平均值。

```js

function calculateAverage(arr) {

    let sum = 0

    arr.forEach(x => {

        sum += x

    });

    let ave = sum / arr.length

    return ave;

}

console.log('===============计算数组的平均值 =================');

console.log(calculateAverage([1,2,3,4,5]))

// 第二种方法【reduce】

function calculateAverage02(array) {

    const sum = array.reduce((x,y) => (x + y),0) /array.length

    return sum

}

console.log(calculateAverage02([1,2,3,4,5]));

```

3. 任务3:检查字符串是否为回文

- 编写一个函数isPalindrome,接受一个字符串作为参数,判断该字符串是否为回文(正读和反读相同)。

```js

function isPalindrome(Str){

    // 清理字符串,都变成小写,不要空字符 【 .toLowerCase(); 】

    const One = Str.replace(/[^a-zA-Z0-9]/g,'').toLowerCase()  // g 代表全局匹配,如果没有的话,默认为查找第一个字符

    // 反读 【split()把字符串拆分成数组】【reverse()反转】【join('')把数组重新拼接成字符串】

    const Two = One.split('').reverse().join('')

    if (One === Two) {

        console.log('是回文');

    }

    else{

        console.log('不是回文');

    }

}

console.log('===============检查字符串是否为回文 =================');

isPalindrome('alrla')

isPalindrome('abcd')

```

4. 任务4:实现一个简单的计数器

- 使用闭包实现一个简单的计数器,每次调用时返回当前的计数值。

```js

// 闭包:让内部函数能够访问并修改外部函数的作用域中的变量

// 定义一个外部函数

function A(){

    let number = 0

    // AA 函数的参数 number 不能与外部变量同名,会导致作用域冲突。

    // 去掉参数后,AA 函数可以直接访问和修改外部的 number,从而实现闭包的效果。

    function AA(){

        number ++

        // 返回当前值

        return number

    }

    // 返回内部函数的值,让外部可以调用

    return AA;

}

console.log('===============闭包=================');

const counts = A()

console.log(counts());

console.log(counts());

console.log(counts());

```

5. 任务5:过滤数组中的偶数

- 编写一个函数filterEvenNumbers,接受一个数字数组作为参数,返回一个只包含偶数的新数组。

```js

function filterEvenNumbers(ArrayList) {

    console.log("==============过滤数组中的偶数 =================");

    const NewAL = ArrayList.filter(item => item % 2 ==0 )

    console.log(NewAL);

}

filterEvenNumbers([1,2,3,4,5,6]);

```

6. 任务6:实现一个简单的对象工厂

- 编写一个函数createPerson,接受name和age作为参数,返回一个包含这些属性的对象。

```js

function createPerson(Name,Age) {

    const Obj = {Name,Age}

    return Obj

}

console.log("============== 简单的对象工厂 =================");

console.log(createPerson('翠花',18));

```

7. 任务7:递归计算阶乘

- 编写一个递归函数factorial,计算一个非负整数的阶乘。

```js

// 阶乘的定义是:

// n!=n×(n−1)×(n−2)×⋯×1

// 0!=1

function factorial(Num){

    if (Num == 0) {

        return 1

    }

    else{

        // factorial(Num-1) 是一个递归调用,而不是直接的数值。它的作用是计算 Num-1 的阶乘,然后将结果乘以当前的 Num。

        return Num * factorial(Num-1)

    }

}

function factorial02(Num){

    // 【三元运算符】 条件表达式 ? 表达式1 : 表达式2

    return Num == 0 ? 1 : Num * factorial02(Num - 1)

}

console.log("============== 递归计算阶乘  =================");

console.log(factorial(4));

console.log(factorial02(4));

```

8. 任务8:实现一个简单的事件监听器

- 编写一个函数addEventListener,模拟HTML元素的事件监听器功能。接受一个事件类型和一个回调函数作为参数,并在触发时调用回调函数。

```js

console.log("============== 事件监听器  =================");    

function addEventListene(event,callback){

    function even(){

        console.log(`这个${event}被触发了`);

        callback()

    }

    even()

}

addEventListene('click',function(){})

console.log("============== 实现简单的模块 =================");

```

9. 任务9:实现一个简单的模块

- 使用模块模式封装一个mathUtils模块,包含add和multiply两个函数

```js

const mathUtils = (function(){

    function add(a,b){

        return a+b

    }

    function multiply(a,b){

        return a*b

    }

    return{add,multiply}

})()

console.log(mathUtils.add(1,2));

console.log(mathUtils.multiply(1,2));

console.log("============== 实现Promise  =================");  

```

10. 任务9:实现一个简单的Promise

- 使用Promise实现一个异步函数fetchData,模拟从服务器获取数据。如果成功,返回一个字符串;如果失败,抛出一个错误。

```js

function fetchData(){

    return new Promise((resolve,reject)=>{

        const aa = true

        if (aa) {

            resolve('获取成功');

        }

        else{

            reject(new Error('获取失败'))

        }

    })

}

fetchData().then(x=>console.log(x))

```

### 创建完整nodejs项目

- package.json

```json

{

    "name":"Demo01",

    "main": "app.js",

    "scripts": {

        "rr":"node app.js"

    },

    "dependencies": {

        "koa":"latest"

    }

}

```

- npm i 安装依赖

- npm run rr 跑起来

- ![20250218131946](/up-z0.qiniup.com20250218131946.png)

### CommonJS 与 ES Modules 的区别及常规用法

1. CommonJS:是一种模块化规范,主要用于 Node.js 环境。它通过 require 和 module.exports 实现模块的导入和导出。

- 代码

```js

导出模块

// setting.js

function fn() {

    console.log('我是CommonJS');

}

function fn01() {

    console.log('我尝试一下');

}

module.exports = { fn, fn01 };

导入模块

// app.js

const abc = require('./setting');

abc.fn();      // 输出: 我是CommonJS

abc.fn01();    // 输出: 我尝试一下

```

2. ES Modules:是 JavaScript 的原生模块化规范,适用于浏览器和 Node.js(需配置支持)。它通过 import 和 export 实现模块的导入和导出。

    - 支持动态导入:通过 import() 返回一个 Promise,支持按需加载。

    - (需配置 "type": "module" 或使用 .mjs 文件扩展名)。

- 代码

```js

导出模块

// abc.mjs

export function fnA() {

    console.log('我是ES');

}

export const arr = [1, 2, 3, 4, 5, 6];

导入模块

// app.mjs

let abc = await import ('./abc.mjs')

abc.fnA()       // 输出: 我是ES

console.log(abc.arr)   // 输出: [1, 2, 3, 4, 5, 6]

```

#### CommonJS 与 ES Modules 的区别

| 特性             | CommonJS                                      | ES Modules                                      |

|------------------|-----------------------------------------------|-------------------------------------------------|

| **加载方式**      | 同步加载,运行时解析依赖                      | 静态分析,编译时解析依赖                         |

| **导入语法**      | 使用 `require()`                              | 使用 `import` 和 `export`                       |

| **动态加载支持**   | 不支持                                        | 支持(通过 `import()`)                         |

| **运行时性能**     | 稍低(动态解析)                              | 较高(静态优化)                                |

| **作用域**        | 模块私有作用域,模块导出的内容会被缓存        | 导入的是活的绑定,模块内部值变化会反映到导入处  |

| **适用环境**      | 主要用于 Node.js                              | 适用于浏览器和 Node.js                          |

| **文件扩展名**    | 默认 `.js`                                    | 需 `.mjs` 或配置 `"type": "module"`             |



 

## 注意事项

### 文件扩展名

- 如果使用 ES Modules,文件扩展名需为 `.mjs`,或在 `package.json` 中配置 `"type": "module"`。

- CommonJS 默认使用 `.js` 扩展名。

### 运行环境

- **CommonJS** 是 Node.js 的传统模块系统,适合服务器端开发。

- **ES Modules** 是现代 JavaScript 的模块化标准,适用于浏览器和 Node.js,支持静态分析和动态导入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24775.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端网页或者pwa如何实现只横屏显示,设备竖着的时候依然保持横屏

开发的时候,就是以横屏的样式开发的,所以横屏的展示效果就是: 当设备竖着的时候,会进行缩放,展示效果不友好,所以需要设备竖着的时候,也横屏显示: 实现原理就是:使用css监…

计算机毕业设计SpringBoot+Vue.js电影评论网站系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Locale+Jackson导致Controller接口StackOverflowError异常解决

问题 由于参与的项目有出海需求,即需要给外国人使用,即:需要支持i18n(Internationalization的缩写,共20个字母,除去首尾两个字母,中间有18个,故简称i18n)。 本来是好的…

Graph and GNN——图的表示与图神经网络的介绍与应用

Hi,大家好,我是半亩花海。细数日子已然有很长一段时间没有更新博客了,不是在忙东忙西,就是在玩这玩那,在家摆,在学校gap,无敌了。言归正传,今天暂且先进一步探索并整理一部分图神经网…

京准电钟:NTP精密时钟服务器在自动化系统中的作用

京准电钟:NTP精密时钟服务器在自动化系统中的作用 京准电钟:NTP精密时钟服务器在自动化系统中的作用 NTP精密时钟服务器在自动化系统中的作用非常重要,特别是在需要高精度时间同步的场景中。NTP能够提供毫秒级的时间同步精度,这…

Https解决了Http的哪些问题

部分内容来源:小林coding 详细解析 Http的风险 HTTP 由于是明文传输,所以安全上存在以下三个风险: 1.窃听风险 比如通信链路上可以获取通信内容,用户号容易没。 2.篡改风险 比如强制植入垃圾广告,视觉污染&#…

GO 进行编译时插桩,实现零码注入

Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术,目的是在不修改业务代码的情况下,实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改,将监控代码注入到…

flex布局自定义一行几栏,靠左对齐===grid布局

模板 <div class"content"><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"…

微软推出Office免费版,限制诸多,只能编辑不能保存到本地

易采游戏网2月25日独家消息&#xff1a;微软宣布推出一款免费的Office版本&#xff0c;允许用户进行基础文档编辑操作&#xff0c;但限制颇多&#xff0c;其中最引人关注的是用户无法将文件保存到本地。这一举措引发了广泛讨论&#xff0c;业界人士对其背后的商业策略和用户体验…

NLP的预处理数据

处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字&#xff0c;然后转换为张量&#xff0c;成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。 如果您计划使用预训练模型&#xff0c;重要的是使用与之关联的…

应用的负载均衡

概述 负载均衡&#xff08;Load Balancing&#xff09; 调度后方的多台机器&#xff0c;以统一的接口对外提供服务&#xff0c;承担此职责的技术组件被称为“负载均衡”。 负载均衡器将传入的请求分发到应用服务器和数据库等计算资源。负载均衡是计算机网络中一种用于优化资源利…

C# 根据Ollama+DeepSeekR1开发本地AI辅助办公助手

在上一篇《访问DeepSeekR1本地部署API服务搭建自己的AI办公助手》中&#xff0c;我们通过通过Ollama提供的本地API接口用Python实现了一个简易的AI办公助手&#xff0c;但是需要运行Py脚本&#xff0c;还比较麻烦&#xff0c;下面我们用C#依据Ollama提供的API接口开发一个本地A…

springboot+dubbo+zookeeper的注册服务和调用实践

目录 zookeeper为什么可作为注册中心zookeeper注册中心优缺点启动zookeeper编写springboot项目提供dubbo服务1. 服务接口2. Springboot引入dubbo实现服务接口2.1 工程目录和依赖2.2 启动程序和application.properties2.3 DubboService 实现服务接口2.4 测试api&#xff0c;用于…

NL2SQL的应用-长上下文模型在处理NL2SQL任务时,相较于传统模型,有哪些显著的优势

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下NL2SQL的应用-长上下文模型在处理NL2SQL任务时&#xff0c;相较于传统模型&#xff0c;有哪些显著的优势。NL2SQL&#xff08;自然语言转SQL&#xff09;技术旨在将用户自然语言提问自动转换为结构化查询语句&#…

A Large Recurrent Action Model: xLSTM Enables Fast Inference for Robotics Tasks

奥地利林茨约翰开普勒大学机器学习研究所 ELLIS 小组&#xff0c;LIT 人工智能实验室奥地利林茨 NXAI 有限公司谷歌 DeepMind米拉 - 魁北克人工智能研究所 摘要 近年来&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09;领域出现了一种趋势&#xff0c;…

DeepSeek本地部署+自主开发对话Web应用

文章目录 引言前端部分核心页面DeepSeek.vueMyModal.vue 后端部分WebSocketConfig 配置类AbstractDeepSeekToolDeepSeekWebSocketHandler 数据库设计总结 引言 最近DeepSeep横空出世&#xff0c;在全球内掀起一股热潮&#xff0c;到处都是满血大模型接入的应用&#xff0c;但这…

DMA 定制固件教程:小白跟做即得单人固件,超详细纯喂饭教程,100% 成功秘籍!FPGA仿真1:1、中断逻辑和TLP核心都在。

DMA 定制固件教程 小白跟着操作做可以做出的单人固件 图文教程 链接&#xff1a;https://docs.qq.com/doc/DQ01lVGtHelROVHNv 本图文教程包含内容&#xff1a; 一、DMA仿真技术采集真实单人固件 二、网卡TLP仿真固件生成 三、DMA仿真技术io、中断逻辑&#xff0c;从零仿真 四、…

Linux | Ubuntu 与 Windows 双系统安装 / 高频故障 / UEFI 安全引导禁用

注&#xff1a;本文为 “buntu 与 Windows 双系统及高频故障解决” 相关文章合辑。 英文引文&#xff0c;机翻未校。 How to install Ubuntu 20.04 and dual boot alongside Windows 10 如何将 Ubuntu 20.04 和双启动与 Windows 10 一起安装 Dave’s RoboShack Published in…

spring中的注解介绍

本篇文章专门用来介绍spring中的各种注解。 1、RestController 1、含义 2、举例 3、使用场景 RestController 通常用于开发 RESTful API&#xff0c;适合返回 JSON 或 XML 数据的场景 4、总结 RestController 是 Spring 中用于简化 RESTful Web 服务开发的注解&#xff0c;它结…

JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用

生产问题定位指南&#xff1a;几款必备的可视化工具 引言 在上一篇文章中&#xff0c;详细的介绍了JDK自带的一系列命令行工具&#xff0c;&#xff0c;如jps、jmap、jstat、jstack以及jcmd等&#xff0c;这些工具为排查和诊断Java虚拟机&#xff08;JVM&#xff09;问题提供…