这是我参与【第六届青训营】伴读笔记创作活动的第8天
JavaScript(简称JS)是一种解释型编程语言,最初用于增强网页的交互性和动态功能。
首先,让我们先认识一下js是什么:
- 变量:在JavaScript中,变量用于存储数据,并且可以根据需要更改。声明变量时需要使用关键字var、let或const。
各自的区别: var:使用var关键字声明的变量在整个函数作用域范围内都可见,相当于全局变量,并且如果没有用var来声明变量,则该变量将被自动声明为全局变量。var关键字可以重复声明同名变量。 let:与var不同,使用let声明的变量只在块级作用域内有效,而不是整个函数作用域内。而且,使用let声明的变量不能重复声明,但它开始的时候可以不用赋值。 const:使用const声明的变量也是块级作用域内有效,一旦声明了就不能再改变其值。即使使用数组或对象等形式存储数据,也不能改变其地址(即引用不变),但可以修改其属性。与使用let一样,使用const声明的变量也不能重复声明。
- 数据类型:JavaScript支持多种数据类型,包括数字、字符串、布尔值、对象、数组、函数等等。不同的数据类型具有不同的属性和方法。
3. 运算符:JavaScript提供了许多运算符来执行各种操作,如算术运算、比较运算、逻辑运算等。
4. 函数:JavaScript中的函数可以看作是一个可重复使用的代码块,它可以接受参数并返回值。函数在JavaScript中起着非常重要的作用,可以大大提高代码的复用性和可读性。
5. 条件语句和循环语句: 在JavaScript中,条件语句(如if/else语句)和循环语句(如for和while语句)可以控制程序的流程,并根据需要反复执行某些代码块。
6. DOM和BOM: JavaScript还具备操作文档对象模型(DOM)和浏览器对象模型(BOM)的能力。通过DOM,JavaScript可以访问HTML页面中的元素,并对其进行添加、修改或删除等操作。而BOM则提供了与浏览器交互的功能,例如控制窗口大小、弹出对话框等。
在js6之前,我们的js有两种作用域:全局作用域和局部作用域。
全局作用域是指在脚本中定义的任何地方都可以访问的变量、函数和对象。它们在页面加载时就被创建,并且在页面卸载前都会一直存在。局部作用域是指在函数内部定义的变量和函数,只能在该函数内部访问,并且在函数执行完毕后就被销毁了。这种作用域可以避免变量和函数名的冲突,也可以提高代码的安全性和可维护性。 在js6之后,我们开始使用const和let,这导致我们有了块级作用域,也就是上面的第三种;
接下来,我们再看一下执行上下文,这里我们分为全局执行上下文,函数执行上下文,还有不常用的Eval执行上下文;
这里的全局上下文:也称全局环境,是指在程序执行过程中,在所有函数和代码块之外声明的变量和函数所在的环境。在JavaScript中,全局上下文是默认存在的,并且它是整个JavaScript程序的最外层作用域。 函数执行上下文是只要函数一执行,就会产生一个函数执行上下文; 那么我们最后总的执行上下文个数有:(n+1),n是函数执行的个数; 接下来我们说下闭包: 闭包我的理解就是一个函数返回一个函数,内部函数调用外部函数的数据,柯里化函数也是一种闭包;
闭包的主要作用是将函数与其相关的环境捆绑在一起,形成一个封闭的单元。这种封闭性使得函数内部的变量和参数在函数调用后依然可以被访问和修改,从而实现了一些高级编程技术,例如:
- 实现模块化:通过闭包,可以创建私有变量和函数,避免全局命名空间的污染,从而实现简洁、安全的模块化编程。
- 实现函数式编程:函数式编程中通常使用高阶函数,而闭包则提供了一种方便的实现方式,可以轻松地创建和传递函数,甚至可以在运行时动态生成函数。
- 变量保存:闭包可以保存函数执行时的上下文,例如函数执行时的变量值、执行状态等等,这些信息可以在以后的调用中重复使用,从而提高代码的效率。
- 实现异步编程:JavaScript 中常用的回调函数就是通过闭包来实现的,因为闭包可以在函数之外保存状态信息,从而保证异步操作能够正确地返回和处理。