JavaScript 的核心特性

  1. 单线程与事件循环 (Single-threaded & Event Loop)
  • JavaScript 是单线程语言,同一时间只能执行一个任务
  • 使用事件循环机制处理异步操作
uni.reLaunch({  // 异步任务1加入队列
  url:'/pages/homePage/index'
})
setTimeout(() => {  // 异步任务2加入队列
  uni.showModal({ title: "系统提示",content:"测试提示!" });
}, 10000)
// 同步代码执行完毕后,事件循环处理异步任务
  1. 非阻塞 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 })
  // 请求期间其他代码可以继续执行
}
  1. 函数是一等公民 (First-class Functions)
  • 函数可以作为变量赋值
  • 函数可以作为参数传递
  • 函数可以作为返回值
// 事件处理函数
const handleChange = ({ value }) => { /* ... */ }

// 传递给组件
@click="showToastSwitch"

// 高阶函数使用
message.confirm('是否切换启动提示').then(() => { /* ... */ })
  1. 闭包 (Closures)
  • 内部函数可以访问外部函数的变量
  • 变量生命周期延长
const handleChange = ({ value }) => {
  // 这些变量在setTimeout回调中形成闭包
  if (value == true) {
    uni.setStorageSync('$popupWindowType', '1')
  } else {
    uni.setStorageSync('$popupWindowType', '2')
  }
  
  setTimeout(() => {
    // 闭包:可以访问外部函数的变量
    uni.showModal({ title: "系统提示",content:"测试提示!" });
  }, 10000)
}
  1. 原型继承 (Prototype-based Inheritance)
  • 对象通过原型链继承属性和方法
  • 不同于类继承的机制
// uni 对象及其方法通过原型链组织
uni.reLaunch()
uni.navigateTo()
uni.setStorageSync()
  1. 动态类型 (Dynamic Typing)
  • 变量类型在运行时确定
  • 同一变量可以存储不同类型的数据
    示例
let checked = ref<boolean>(true)  // boolean
checked.value = false             // ts仍然是boolean
// 但在JavaScript中可以是任何类型
  1. 自动垃圾回收 (Automatic Garbage Collection)
  • 自动管理内存分配和释放
  • 当对象不再被引用时自动回收
// 问题:定时器引用可能导致内存泄漏
setTimeout(() => {
  uni.showModal({ title: "系统提示",content:"测试提示!" });
}, 10000)
// 如果不清理,即使页面销毁,相关引用仍可能存在
  1. 异步编程模型 (Asynchronous Programming Model)
  • 支持回调函数、Promise、async/await
  • 处理耗时操作而不阻塞主线程
// Promise 方式
message.confirm('是否切换启动提示')
  .then(() => { resolve(true) })
  .catch(() => { resolve(false) })

// async/await 方式
const getSignaturePng = async () => {
  const item = await request(/* ... */)
}
  1. 词法作用域 (Lexical Scoping)
  • 变量作用域在代码编写时确定
  • 内部作用域能访问外部作用域变量
const checked = ref<boolean>(true)  // 全局作用域

const handleChange = ({ value }) => {  // 函数作用域
  // 可以访问外部的 checked
  if (value == true) {
    uni.setStorageSync('$popupWindowType', '1')
  } else {
    uni.setStorageSync('$popupWindowType', '2')
  }
}
  1. 基于对象 (Object-based)
  • 一切皆对象(除了原始类型)
  • 支持动态添加属性和方法
    体现
// ref 创建响应式对象
const checked = ref<boolean>(true)
const signaturePngIcon = ref('../../static/images/iconImg/signature.png')

// 对象属性动态访问
uni.showModal({ title: "系统提示", content:"测试提示!" });

这些核心特性共同构成了 JavaScript 的语言基础。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容