学习JS的基本概念
JS是什么?
JavaScript(JS) 是一种轻量级的、解释型的、面向对象的编程语言。它是一门可用于前端开发、后台开发、移动开发等多种场景的语言。
JS的数据类型
在JS中,我们可以将数据分为7个不同类型:Undefined、Null、Boolean、Number、String、Symbol和Object。其中 Undefined 和 Null 分别代表未定义和空值;Boolean表示布尔类型,true和false;Number表示数值类型;String表示字符串类型;Symbol表示唯一标识符;Object表示对象。
变量提升
在JS中,变量提升指的是在执行过程中将变量声明提升至当前作用域顶部的行为。也就是说,在定义时还没有赋值的变量会被默认初始化为 undefined。因此,如果你在变量定义之前使用该变量,其值将为 undefined。
作用域
作用域是指变量被定义时所在的环境范围。在JS中,作用域分为全局作用域和局部作用域。全局作用域指的是在整个程序运行期间均可访问的变量,而局部作用域指的是在函数内部定义的变量,只能在该函数内部被访问。
闭包
当我们在JavaScript中定义函数时,每个函数都有一个独立的作用域。而闭包则是在这个基础上进一步扩展了作用域链。
闭包是指能够访问自由变量的函数。自由变量是指在函数中使用的,但既不是函数参数也不是函数内部定义的变量。闭包可以让我们在函数外部访问函数内部的数据。
下面是一个简单的闭包示例:
function outer() {
let count = 0;
function inner() {
count++;
console.log(count);
}
return inner;
}
const closureFunc = outer();
closureFunc(); // 输出1
closureFunc(); // 输出2
closureFunc(); // 输出3
在这个示例中,outer函数返回了一个内部定义的函数inner,并且inner函数可以访问outer函数的局部变量count。当我们调用outer函数并将其结果保存到变量closureFunc时,实际上就创建了一个闭包。我们可以多次调用closureFunc函数,并且每次调用都会增加count的值并输出相应的结果。
需要注意的是,在闭包中访问外部的变量会导致该变量无法被垃圾回收。因此,如果滥用闭包可能会导致内存泄漏的问题。
垃圾回收
垃圾回收是指自动释放已经不再使用的内存空间的过程。在JS中,开发人员不需要手动管理内存,由浏览器自动进行垃圾回收。常见的垃圾回收算法有标记清除算法和引用计数算法。