深入理解JS

83 阅读3分钟

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中的垃圾回收是自动管理内存的一种机制,当一个对象不再使用时,可以被垃圾回收器释放。