- 单线程与事件循环 (Single-threaded & Event Loop)
- JavaScript 是单线程语言,同一时间只能执行一个任务
- 使用事件循环机制处理异步操作
uni.reLaunch({ // 异步任务1加入队列
url:'/pages/homePage/index'
})
setTimeout(() => { // 异步任务2加入队列
uni.showModal({ title: "系统提示",content:"测试提示!" });
}, 10000)
// 同步代码执行完毕后,事件循环处理异步任务
- 非阻塞 I/O (Non-blocking I/O)
- 异步操作不会阻塞代码执行
- 通过回调、Promise、async/await 处理异步结果
实际应用
// 您的异步请求代码
const getSignaturePng = async () => {
// 非阻塞网络请求
const item = await request('http://182.92.5.197:4756', '/api/Users/GetUsersModel', 'GET', { FuserId: userInfo.userId })
// 请求期间其他代码可以继续执行
}
- 函数是一等公民 (First-class Functions)
- 函数可以作为变量赋值
- 函数可以作为参数传递
- 函数可以作为返回值
// 事件处理函数
const handleChange = ({ value }) => { /* ... */ }
// 传递给组件
@click="showToastSwitch"
// 高阶函数使用
message.confirm('是否切换启动提示').then(() => { /* ... */ })
- 闭包 (Closures)
- 内部函数可以访问外部函数的变量
- 变量生命周期延长
const handleChange = ({ value }) => {
// 这些变量在setTimeout回调中形成闭包
if (value == true) {
uni.setStorageSync('$popupWindowType', '1')
} else {
uni.setStorageSync('$popupWindowType', '2')
}
setTimeout(() => {
// 闭包:可以访问外部函数的变量
uni.showModal({ title: "系统提示",content:"测试提示!" });
}, 10000)
}
- 原型继承 (Prototype-based Inheritance)
- 对象通过原型链继承属性和方法
- 不同于类继承的机制
// uni 对象及其方法通过原型链组织
uni.reLaunch()
uni.navigateTo()
uni.setStorageSync()
- 动态类型 (Dynamic Typing)
- 变量类型在运行时确定
- 同一变量可以存储不同类型的数据
示例
let checked = ref<boolean>(true) // boolean
checked.value = false // ts仍然是boolean
// 但在JavaScript中可以是任何类型
- 自动垃圾回收 (Automatic Garbage Collection)
- 自动管理内存分配和释放
- 当对象不再被引用时自动回收
// 问题:定时器引用可能导致内存泄漏
setTimeout(() => {
uni.showModal({ title: "系统提示",content:"测试提示!" });
}, 10000)
// 如果不清理,即使页面销毁,相关引用仍可能存在
- 异步编程模型 (Asynchronous Programming Model)
- 支持回调函数、Promise、async/await
- 处理耗时操作而不阻塞主线程
// Promise 方式
message.confirm('是否切换启动提示')
.then(() => { resolve(true) })
.catch(() => { resolve(false) })
// async/await 方式
const getSignaturePng = async () => {
const item = await request(/* ... */)
}
- 词法作用域 (Lexical Scoping)
- 变量作用域在代码编写时确定
- 内部作用域能访问外部作用域变量
const checked = ref<boolean>(true) // 全局作用域
const handleChange = ({ value }) => { // 函数作用域
// 可以访问外部的 checked
if (value == true) {
uni.setStorageSync('$popupWindowType', '1')
} else {
uni.setStorageSync('$popupWindowType', '2')
}
}
- 基于对象 (Object-based)
- 一切皆对象(除了原始类型)
- 支持动态添加属性和方法
体现
// ref 创建响应式对象
const checked = ref<boolean>(true)
const signaturePngIcon = ref('../../static/images/iconImg/signature.png')
// 对象属性动态访问
uni.showModal({ title: "系统提示", content:"测试提示!" });
这些核心特性共同构成了 JavaScript 的语言基础。