函数概述
函数相当于一个代码空间,他里面可以存储一些代码片段,一般我们会将一些功能性代码抽取放入到函
数内,这样的操作就是封装。核心就是利用函数来减少冗余代码的出现,形成对应的复用。
函数的分类
系统函数 (系统本身就写好的 你只需要调用 console.log() 属于全局窗口的 window)
内置函数 (对象内部提供的 Math.pow )
自定义函数 (由自己定义的函数)
函数的定义
使用function关键来定义
定义的方式有三种
匿名函数 (没有名字的函数 无法被复用的)
具名函数 (有名字的函数 必须调用才会执行 具备复用性)
使用对象构建的形式 (new关键来构建)
函数的参数
没有实际的参数叫形参 用于定义 (随便写)
有实际值得参数叫实参 用于传递
return关键词
return 是用于在函数中返回对应的结果的,默认情况下函数return undefined。当return完那么对应
的函数执行就结束了。
总结
break 跳出循环和switch 不会结束function
continue 只能用于循环中 跳过本次循环 进入下次
return 结束整个函数 返回对应的数据 (放在最后)
throw new Error 结束整个程序
arguments
arguments是一个参数列表,参数列表其实是一个伪数组(伪装的数组 有数组的一些特性 但是不是数组
(不具备数组的方法))。他可以用于获取所有的参数(传递的参数)
arguments的属性及方法
length属性 用于获取对应的传入参数个数
callee 方法 指向当前的函数
arguments访问对应的参数使用下标访问
下标从0开始 到 arguments.length-1结束
0表示是第一个参数 那么5表示第六个参数 x表示x+1个参数
省略对应的形参 直接传入实参 在函数中使用arguments来接收的对应的实参
作用域及作用域链
作用域概述
一个变量的作用范围称为作用域,作用域主要划分为全局作用域(全局可用),局部作用域(局部可用
又为函数作用域)
在全局中不能访问局部作用域的变量
注意
var 关键词会进行变量提升
只要是在function中使用var关键词声明那么这个变量就是局部变量 那么在这个里面使用到所有这
个变量都是指向这个局部变量
如果在function中没有使用var关键词声明那么这个变量就是全局变量
作用域链
作用域链就是逐层向上查找对应的作用域(变量声明)形成的链子,如果没有找到那么就会报错。
递归 (Ologn)
递归是一个算法,算术其实就是固定的套路,递归算法是为了降低时间复杂度提高效率所设计的算法,
他可以完成所有循环可以做的事情。
递归的用途 (可以在不知道层级的情况下走到底)
文件目录遍历
DFS查找
多级对象分析合并
深拷贝
...
递归的流程
初始值 (不变的值)
规律
自己调自己
数组
数据结构
数据结构主要是数据的一个存储和逻辑结构的体现。只要能存储数据的一个结构我们就称为数据结构。
数组
数组是一种线性的数据结构,他可以存储对应的数据,一般通过对应的索引下标进行数据的访问。在一
般情况下我们在数组里面存储的数据类型是一致的。(数组也可以存储不同数据类型的数据)
数组的定义
使用 [ ] 赋值来定义
使用new关键词来定义
数组的特性
数组具备下标 可以通过下标来访问和赋值操作
数组具备length属性 length重新修改是可行(改大会进行扩容操作 改小会进行删除操作)