JavaScript 中有几种不同的数据类型,这些数据类型在储存上的差距是有区别的。
- 原始数据类型:原始数据类型包括布尔值(boolean)、数字(number)、字符串(string)和空值(null)、未定义(undefined)五种。这些数据类型在储存上占用的空间很小,通常只需要几个字节。
- 对象类型:对象类型包括数组(array)、函数(function)、对象(object)等。这些数据类型在储存上占用的空间相对较大,因为它们可能包含多个属性或方法。
总之,不同的数据类型在储存上的差距是有区别的,你应该根据使用场景来选择合适的数据类型。
数据类型分两大类:
- 基本数据类型,变量保存的是值
- 引用数据类型,变量保存的是引用地址
闭包的理解和使用
闭包是一种特殊的对象,它包含了一个函数和与该函数相关的引用环境。
闭包的函数可以访问闭包创建时的环境,即使在该函数被调用时,外部的环境已经发生了变化。这使得闭包很适合用来做回调函数或者保存状态。
举个例子,假设你有一个函数,它接受一个数字作为参数,并返回一个函数。该返回的函数可以对传入的数字进行累加,每次调用都会将累加器加 1:
在上面的例子中,createAdder 函数创建了一个闭包,该闭包包含了一个函数和与该函数相关的环境。这个环境包含了变量 x 的值。当我们调用 createAdder(5) 时,它返回了一个新函数,这个函数可以对传入的参数 y 进行累加。在这个函数中,变量 x 的值是 5,所以调用 add5(2) 和 add5(10) 时,都会将它们的参数与 5 相加。
闭包是一种非常有用的技术,它可以帮助你保存状态、创建封装的函数等
作用域
在 JavaScript 中,作用域是指程序中定义变量和函数的区域。一般来说,变量和函数在它们被声明的地方可用,并且其他地方不可用。
JavaScript 中有两种类型的作用域:全局作用域和局部作用域。
全局作用域:全局作用域是整个程序的范围。在全局作用域中声明的变量和函数可在整个程序的任何地方使用。如果在函数内部声明的变量没有使用 var 关键字,则该变量也是全局变量。
局部作用域:局部作用域是在函数内部定义的作用域。在局部作用域中声明的变量和函数仅在函数内部可用,在函数外部不可用。使用 var 关键字声明的变量是局部变量,如果没有使用 var 关键字,则该变量是全局变量。
举个例子:
上面的代码中,globalVariable 和 globalFunction 是全局变量和函数,它在整个程序的任何地方都可以访问。localScope 函数中的 localVariable 是局部变量,只能在函数内部访问,在函数外部访问会抛出 ReferenceError 错误。
另外,JavaScript 中还有一个概念叫做闭包,它可以让我们在函数外部访问函数内部的局部变量。这是通过在函数内部返回另一个函数来实现的。
举个例子: