1.函数提升
程序执行前会将函数提升到所在作用域的最前边
2.递归
在一个函数的内部调用了自身这个函数
如何使用递归:
要有边界条件
结合着return,最终跳出函数
递归:https://www.codece.com/archives/102
3.匿名函数
function (){ }
(1)创建函数
函数声明function fn(){} |
---|
函数表达式变量名称就是函数名称var fun=function(){} |
对比函数名称()和函数名称
函数名称(),调用函数,得到函数的返回结果。
函数名称,本质上是一个变量,保存了一个函数。
对比函数声明和函数表达式创建函数的区别
函数声明创建的函数存在函数的提升,顺序上可以先写调用再写创建
函数表达式创建的函数只是存在变量声明的提升,必须先写创建再写调用
(2)匿名函数自调用
全局污染:全局变量的出现产生的影响
(function(){ 函数作用域下,变量是局部变量,可以防止污染全局})();
(3)回调函数
将函数以实参的形式传递,这个传递的函数称为回调函数
function tao(madai){ madai() //调用传递进来的回调函数}function dong(){ }tao(dong);tao( function(){ } )
4.系统函数
isNaN() 检测一个值是否为NaN,常用于检测用户输入的值是否含有非数字
会将检测的值隐式转换为数值,然后查看是否为NaN,是->true 不是->false
isFinite() 检测一个值是否为有限值,只有Infinity是无限值,其它所有的值都是有限值, 是有限值 -> true 不是有限值 -> false
eval() 执行字符串表达式
5.对象
属于引用类型数据
对象是一组属性和方法的集合
一部手机,属性有品牌、颜色、型号、尺寸… 方法有玩游戏、看视频、办公、购物…
旁边的电扇,属性有品牌、颜色、高度… 方法有吹风、摇头…
一个杯子,属性颜色、容量… 方法存储水…
万物皆对象
(1)分类
自定义对象,用户自己创建的对象
内置对象(ES对象),JS提供的对象
宿主对象,根据不同的执行环境划分
(2)自定义对象创建方式
对象字面量
内置构造函数
自定义构造函数
(3)对象字面量
{ 属性名: 属性值, 属性名: 属性值 }
属性名中的引号可以省略,如果含有特殊字符必须加引号
(4)访问属性
对象.属性名
对象[ ‘属性名’ ]
如果属性名不存在则返回undefined
(5)内置构造函数
new Object()
创建一个空对象,需要单独添加每个属性
(6)遍历属性
依次访问对象中的每个属性
for(var k in 对象){ k 代表属性名 对象[k] 属性名对应的属性值}