JS的数据类型
在JS中,有以下几种原始数据类型:
- 数字(number)
- 字符串(string)
- 布尔值(boolean)
- null
- undefined
同时,JS还有以下两种特殊的数据类型:
- 对象(object)
- 数组(array)
这些数据类型可以通过使用变量来存储和处理:
let numberValue = 42;
let stringValue = "Hello world";
let booleanValue = true;
let nullValue = null;
let undefinedValue = undefined;
let objectValue = { name: "Alice", age: 30 };
let arrayValue = [1, 2, 3, 4, 5];
**
变量提升
在JS中,变量声明会被“提升”到所在函数或全局作用域的顶部。这意味着,无论变量声明在函数或语句的何处,它们都可以在函数或语句中的任何位置使用。
function example() {
console.log(count); // undefined
var count = 1;
console.log(count); // 1
}
example();
**
在上面的示例代码中,count变量的声明被提升到函数的顶部。因此,第一个console.log()语句会输出undefined,而不是抛出错误。第二个console.log()语句在变量赋值后输出1。
作用域
在JS中,作用域指的是定义变量的区域。JS中有两种作用域:
- 全局作用域
- 局部作用域
在函数内部定义的变量具有局部作用域,只能在函数内部访问。在函数外部定义的变量具有全局作用域,可以在所有函数和代码块内访问。
let globalVar = "I'm a global variable";
function example() {
let localVar = "I'm a local variable";
console.log(localVar);
console.log(globalVar);
}
example();
console.log(globalVar);
console.log(localVar); // 报错:Uncaught ReferenceError: localVar is not defined
**
在上面的示例代码中,globalVar变量具有全局作用域,所以它可以在函数内部和外部访问。localVar变量具有局部作用域,所以它只能在函数内部访问。
闭包
在JS中,闭包指的是能读取其他函数内部变量的函数。闭包通常用于封装数据和行为,并可以用来模拟私有变量和方法。
function makeCounter() {
let count = 0;
function counter() {
count++;
console.log(count);
}
return counter;
}
let counter = makeCounter();
counter(); // 1
counter(); // 2
counter(); // 3
**
在上面的示例代码中,makeCounter()函数返回了一个counter()函数。counter()函数可以访问 makeCounter()函数内部的count变量,因为counter()函数是makeCounter()函数的闭包。每次调用counter()函数时,它都会将count变量增加1并输出个数。
垃圾回收
在JS中,垃圾回收是自动管理内存的一种机制。当JS程序创建一个新对象时,它会分配一些内存来存储这个对象。当这个对象不再使用时,垃圾回收器会将其标记为“垃圾”,并释放内存以供后续使用。
let obj = {};
obj = null; // 垃圾回收器将obj标记为"垃圾"
在上面的示例代码中,obj变量创建了一个新的空对象。当obj变量被赋值为null时,之前分配的内存就可以被垃圾回收器释放。
JS是一门前端开发中常用的编程语言,它具有以下基本概念:
- 数据类型:JS有数字、字符串、布尔值、null、undefined、对象和数组等数据类型。
- 变量提升:JS中的变量声明会被“提升”到所在函数或全局作用域的顶部。
- 作用域:JS中有全局作用域和局部作用域,定义变量的区域即为其作用域。
- 闭包:JS中的闭包指的是能读取其他函数内部变量的函数,在封装数据和行为方面非常有用。
- 垃圾回收:JS中的垃圾回收是自动管理内存的一种机制,当一个对象不再使用时,可以被垃圾回收器释放。