JS基础 | 青训营笔记

54 阅读4分钟

目录

JS的整体发展
变量提升
JS的数据存储
基础数据类型和复杂数据类型
JS的执行
闭包
垃圾回收

随着Web应用程序和移动应用程序的普及,JavaScript已成为最流行的编程语言之一。它是一种弱类型、解释性的脚本语言,被用于开发Web前端、后端和移动应用程序。

JS的整体发展

JavaScript最初是由Netscape的Brendan Eich开发并命名为“LiveScript”。之后,Sun Microsystems推出了一种名为“JavaScript”的语言,创造了短时间内广泛广告“JavaScript”的印象,并促进了语言的广泛接受。2009年,Node.js的出现使得JS在后端服务器编程方面的重要性得到了进一步的提升。2014年,ECMAScript 6标准发布,新增了许多功能,例如箭头函数、模板文字、类、模块等,使得现代JavaScript编程变得更加简单和优雅。

变量提升

当JavaScript代码被解析时,所有的变量声明和函数声明在代码开始之前通过提升被处理。这些被提升的声明可以在代码中的任何位置访问。

例如:

console.log(x);
var x = 5;

这段代码输出的结果是“undefined”,因为变量“x”在声明之前被访问。它的实际值只能在声明后获得。通过将变量的声明移到它被访问的位置来解决这个问题。

JS的数据是怎么存储的

JavaScript中的数据包括基本数据类型(如字符串、数字、布尔值、null和undefined)和复杂数据类型(如对象和数组)。这些数据在内存中以不同的方式存储。

基本数据类型值被存储在栈区中,而复杂数据类型的值则被存储在堆区中。变量在内存中存储为对值的引用,而不是对实际值的引用。

例如:

var x = 10;
var y = x;
x = 20;
console.log(y);

这个输出猜测是10,因为当值被赋给“y”时,它被赋予了“x”的值10,而不是对“x”的引用。所以,当“x”的值更改为20时,变量“y”保留它最初的值10。

基础数据类型和复杂数据类型的区别

JavaScript有六个基本数据类型:字符串、数字、布尔值、null、undefined和Symbol(从ECMAScript 6引入)。

var str = "Hello World";  // 字符串
var num = 10;  // 数字
var bool = true;  // 布尔值
var n = null;  // null
var u = undefined;  // undefined
var sym = Symbol();  // Symbol

对象和数组是JS中的复杂数据类型。

var obj = { name: "John", age: 30 };  // 对象
var arr = [1, 2, 3];  // 数组

基础数据类型是值类型,变量保存了实际的值,而复杂数据类型则是引用类型,变量保存了一个指针,指向堆内存中的实际数据。

JS的执行

JavaScript通过解析器编译后由引擎执行。当代码被执行时,引擎将代码转换为可执行的指令集。这些指令被保存在内存中,并在需要时执行。

JavaScript是一种单线程语言,意味着JS引擎在任何给定的时间只能执行一个任务。因此,JS使用事件循环来管理并发操作。

闭包

闭包是指函数和其相关的变量集合的组合。它允许隐藏函数内部的变量,并使这些变量在函数执行后仍然存在。这通过在函数内部创建一个新的作用域来实现,可以将外层函数中的变量保持在内存中,并且通过闭包,可以在函数执行后使用这些变量。

例如:

function outer() {
  var x = 10;
  function inner() {
    console.log(x);
  }
  return inner;
}
var closure = outer();
closure();  // 输出:10

这里,“inner”函数访问了外部函数“outer”中的变量“x”,并将其保持在内存中,即使“outer”函数已经执行完毕。变量“x”通过返回的闭包“inner”保留在内存中,并且可以在函数执行后使用。

垃圾回收

JavaScript的垃圾回收是自动的过程,当没有对变量或对象的引用时,自动回收内存。垃圾收集器跟踪被分配的所有对象,并确定哪些对象不再需要,自动释放它们的内存。在JavaScript中,开发人员通常不需要显式释放内存。

例如,当一个变量没有任何引用时,JavaScript的垃圾回收器会自动释放它占用的内存。

var obj = { name: "John" };
obj = null;  // 不再有任何引用指向该对象,所以对象被删除并释放内存

总体上,理解 JavaScript 的变量提升、数据存储、基础数据类型和复杂数据类型、执行、闭包以及垃圾回收等概念非常重要,对于深入掌握JavaScript编程语言和开发Web应用程序非常有帮助。