TypeScript
未读数据结构栈栈是一个一个**==后进先出==**的数据结构TypeScript 版数据结构
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647// 定义栈需要的方法interface IStack<T> { push(element: T): void; pop(): T | undefined; peek(): T; isEmpty(): boolean; size(): number; toString(): string;}// 封装栈结构 基于数组实现class Stack<T = any> implements IStack<T> { list: T[]; constructor() { this.list = []; } // 向栈顶添加一个元素 push(element: T) { thi ...
fs 模块fs 模块的三种读取方式1234567891011121314151617181920212223242526272829303132const fs = require("fs");// 1.同步读取 获取到结果才会执行后续代码// 第一个参数是需要读取的文件路径 第二参数是配置optionsconst res1 = fs.readFileSync("./a.txt", { encoding: "utf-8", // 编码格式 默认是输出Buffer数据});console.log(res1);// 2.异步读取 回调函数方式// 第三个参数传入函数,等到有结果会回调fs.readFile( "./a.txt", { encoding: "utf-8", }, (error, data) => { if (error) { return; } console ...
1. rollup 的基本使用1.1 安装1npm install rollup -D
1.2 rollup 配置文件编写12345678910111213141516171819202122232425262728293031module.exports = { // 入口 input: './lib/index.js', // 出口 // output: { // format: 'umd', // name: 'ysUtils', // file: './build/bundle.umd.js' // } // 打包不同格式 output: [ { format: 'umd', name: 'ysUtils', file: './build/bundle.umd.js' }, { format ...
1. webpack 实现模块化原理1.1 CommonJs 原理
定义一个 add 函数并导出
1234const add = (num1, num2) => { return num1 + num2}module.exports = add
webpack 打包后的代码为
123456789101112131415161718192021222324252627282930313233343536373839// 定义一个对象// 模块的路径作为key 函数为valuevar __webpack_modules__ = { "./src/js/add.js": function (module) { const add = (num1, num2) => { return num1 + num2; }; // 将我们要导出的变量放到modle中的exports对象 module.exports = add; },};// 定 ...
1. 安装1npm install webpack webpack-cli -D
webpack-cli 不是必须的,是用来加载 webpack.config.js 的配置文件,你完全可以自己创建一个 cli 来加载,例如 vue 使用的就是 vue-cli
2. 配置浏览器兼容性2.1 默认配置如果不配置 Browserslist 那么就会使用默认的配置( > 0.5%, last 2 versions, Firefox ESR, not dead )
> 0.5% 为浏览器的市场占有率大于 0.5%,在https://caniuse.com/usage-table可以查询
last 2 versions 为每个浏览器的最后 2 个版本
not dead 为 24 个月内官方支持更新的浏览器
2.2 手动配置1.在 package.json 配置
12345"browserslistrc": [ ">1%", "last 2 version", "not dead"]
2.在.b ...
初始化1npm init -y
安装 koa1npm install koa
划分目录结构安装路由1npm install koa-router
安装 koa-bodyparser1npm install koa-bodyparser
安装 jsonwebtoken 进行登录鉴权1npm install jsonwebtoken
安装 mysql2 连接数据库1npm install mysql2
123456789101112131415161718192021const mysql = require("mysql2");const connections = mysql.createPool({ host: "127.0.0.1", port: "3306", database: "property", user: "root", password: "xxbsxy",});connections.getConnecti ...
koa 初体验1234567891011121314const Koa = require("koa");const app = new Koa();// use注册中间件app.use((ctx, next) => { // ctx为上下文 里面有response和request对象 // 向客户端返回数据 相当于express的res.send ctx.response.body = "Hello Koa";});app.listen(3000, () => { console.log("服务启动成功");});
koa 中间件和 express 不同,koa 注册中间件只能通过 use 方法
Koa 并没有提供 methods 的方式来注册中间件
也没有提供 path 中间件来匹配路径
不能在一个 use 方法连续注册多个中间件
但是在 koa 的第三方路由中可以连续注册多个中间件
koa 路由的使用1npm install koa-router
...
express 初体验12345678910111213141516171819const express = require("express");// express是一个函数 返回一个appconst app = express();// 监听默认路径app.get("/", (req, res, next) => { // send方法接收两个参数,第一个是状态码 第二个是响应参数 res.send(200, "Hello Express");});// 监听post请求app.post("/", (req, res, next) => { res.send("Hello Express");});// 开启监听app.listen(3000, () => { console.log("服务启动成功");});
express 中间件中间件是什么呢?中间件的本质是传递给 e ...
http 初体验123456789101112const http = require("http");const server = http.createServer((req, res) => { res.end("Hello Server"); // 相当于先调用 write方法然后调用end方法});// 启动服务器并指定端口号和主机// listen方法接收三个参数 第一个是端口号,不传为随机端口,第二个为主机地址默认为0.0.0.0,// 第三个为服务器启动成功的回调server.listen(3000, "0.0.0.0", () => { console.log("服务启动成功");});
创建 http 服务的不同方式12345678910111213141516171819202122232425const http = require("http");// 方式一const server1 = http.cr ...
ES3 中的执行上下文ES3 中的执行上下文类型全局执行上下文这是默认或者说是最基础的执行上下文,一个程序中只会存在一个全局上下文,它在整个 javascrit`脚本的生命周期内都会存在于执行堆栈的最底部不会被栈弹出销毁。全局上下文会生成一个全局对象(以浏览器环境为例,这个全局对象是 window)
全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。通过使用全局对象,可以访问所有其他所有预定义的对象、函数和属性。
在顶层 JavaScript 代码中,可以用关键字 this 引用全局对象。因为全局对象是作用域链的头,这意味着所有非限定性的变量和函数名都会作为该对象的属性来查询。
例如,当 JavaScript 代码引用 parseInt() 函数时,它引用的是全局对象的 parseInt 属性。全局对象是作用域链的头,还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性。
函数执行上下文在函数上下文中,我们用活动对象(activation object, AO)来表示变量对象。
活动对象和变量对象其实是一个东西,只是变 ...