JS的数据类型,储存上的差距

简介: JavaScript 中的数据类型分为基本类型和引用类型,存储方式和占用空间不同。基本类型包括布尔值、数字、字符串、null 和 undefined,占用空间小;引用类型如对象、数组和函数则占用更多空间。合理选择数据类型可优化程序性能。

JavaScript 中有几种不同的数据类型,这些数据类型在储存上的差距是有区别的。

  • 原始数据类型:原始数据类型包括布尔值(boolean)、数字(number)、字符串(string)和空值(null)、未定义(undefined)五种。这些数据类型在储存上占用的空间很小,通常只需要几个字节。
  • 对象类型:对象类型包括数组(array)、函数(function)、对象(object)等。这些数据类型在储存上占用的空间相对较大,因为它们可能包含多个属性或方法。

总之,不同的数据类型在储存上的差距是有区别的,你应该根据使用场景来选择合适的数据类型。

数据类型分两大类

  1. 基本数据类型,变量保存的是
  2. 引用数据类型,变量保存的是引用地址

闭包的理解和使用

闭包是一种特殊的对象,它包含了一个函数和与该函数相关的引用环境。

闭包的函数可以访问闭包创建时的环境,即使在该函数被调用时,外部的环境已经发生了变化。这使得闭包很适合用来做回调函数或者保存状态。

举个例子,假设你有一个函数,它接受一个数字作为参数,并返回一个函数。该返回的函数可以对传入的数字进行累加,每次调用都会将累加器加 1:

在上面的例子中,createAdder 函数创建了一个闭包,该闭包包含了一个函数和与该函数相关的环境。这个环境包含了变量 x 的值。当我们调用 createAdder(5) 时,它返回了一个新函数,这个函数可以对传入的参数 y 进行累加。在这个函数中,变量 x 的值是 5,所以调用 add5(2)add5(10) 时,都会将它们的参数与 5 相加。

闭包是一种非常有用的技术,它可以帮助你保存状态、创建封装的函数等

作用域

在 JavaScript 中,作用域是指程序中定义变量和函数的区域。一般来说,变量和函数在它们被声明的地方可用,并且其他地方不可用。

JavaScript 中有两种类型的作用域:全局作用域和局部作用域。

全局作用域:全局作用域是整个程序的范围。在全局作用域中声明的变量和函数可在整个程序的任何地方使用。如果在函数内部声明的变量没有使用 var 关键字,则该变量也是全局变量。

局部作用域:局部作用域是在函数内部定义的作用域。在局部作用域中声明的变量和函数仅在函数内部可用,在函数外部不可用。使用 var 关键字声明的变量是局部变量,如果没有使用 var 关键字,则该变量是全局变量。

举个例子:

上面的代码中,globalVariable 和 globalFunction 是全局变量和函数,它在整个程序的任何地方都可以访问。localScope 函数中的 localVariable 是局部变量,只能在函数内部访问,在函数外部访问会抛出 ReferenceError 错误。

另外,JavaScript 中还有一个概念叫做闭包,它可以让我们在函数外部访问函数内部的局部变量。这是通过在函数内部返回另一个函数来实现的。

举个例子:

相关文章
|
5月前
|
JavaScript 前端开发
for of和 for in的区别
JavaScript中,for...of遍历可迭代对象的值,适合数组;for...in遍历对象属性,注意其遍历顺序不确定且包括继承属性,可用hasOwnProperty判断自身属性。同步指任务依次执行,异步则通过回调或事件实现非阻塞执行,适用于耗时任务如网络请求。常见异步方式包括定时器、接口调用、事件监听。
223 0
|
5月前
|
JavaScript 前端开发
forEach与map的区别
forEach与map的区别
310 0
|
5月前
|
设计模式 前端开发 JavaScript
MVVM的理解:
MVVM的理解:
402 0
|
5月前
|
JavaScript 前端开发
this指向
在 JavaScript 中,`this` 的指向有多种情况:全局作用域中指向全局对象(如浏览器中的 `window`),函数中默认也指向全局对象,但作为对象方法调用时则指向该对象。箭头函数中的 `this` 继承自定义时的作用域,不会改变。可通过 `call`、`apply` 或 `bind` 方法显式改变 `this` 指向。
82 0
|
5月前
|
前端开发 JavaScript
promise的理解
promise的理解
92 0
|
5月前
|
网络协议 安全
跨域怎么处理 ?
跨域怎么处理 ?
129 0
|
5月前
|
JavaScript 前端开发
es6新增特性
ECMAScript 6(ES6)是JavaScript的重要升级版本,引入了如`let`和`const`声明变量、箭头函数、块级作用域、类、模板字符串、解构赋值等新特性,提升了代码的简洁性与可维护性。
156 0
|
5月前
|
传感器 人工智能 缓存
《WebGL与Three.js打造会"讲故事"的虚拟博物馆》
本文围绕WebGL与Three.js构建虚拟博物馆展开,探讨如何通过数字技术实现文物的生动呈现与文化的深度传播。文中阐述了文物数字分身的构建,包括利用PBR材质还原质感、LOD系统实现模型适配,以及依据文化考据打造展厅空间;讲解了交互设计的巧思,从自然的漫游体验到多感官叙事,再到兼顾自由探索与深度解读的导览系统;还介绍了性能优化策略,以适配不同设备并保障体验流畅。最终展现虚拟博物馆如何打破时空限制,让文物成为能与观众对话的生命体,重构文化传承方式。
141 0
|
5月前
|
存储 缓存 算法
《WebGL打造高性能3D粒子特效系统:从0到1的技术探秘》
本文围绕WebGL构建高性能3D粒子特效系统展开技术探秘。首先介绍WebGL渲染管线的核心机制,阐述从顶点数据处理到光栅化呈现的完整流程;接着讲解数据结构设计的重要性,包括结构数组(SoA)和粒子池的应用;然后说明物理模拟如何赋予粒子自然运动效果,涉及重力、风力、碰撞等模拟方式;还探讨了光影效果与材质渲染的实现,以及性能优化的关键策略,如减少绘制调用、视锥体剔除、资源缓存等。通过这些技术细节与优化技巧,为游戏、可视化项目等打造出流畅且富视觉冲击力的3D粒子特效提供了全面参考。
211 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL表设计经验
本文介绍了数据库表设计的15个实用技巧,涵盖命名规范、字段类型选择、主键设计、索引优化等方面,帮助后端程序员提升数据库设计能力,避免常见错误,提高系统性能与可维护性。
242 0