一.函数的作用域
全局函数:在全局作用域下创建的函数,可以在任意作用域下调用
局部函数:在函数作用域下创建的函数,只能在所在的作用域下调用
作用域链:作用域之间嵌套所形成的一种结构,在查找变量的时候,会沿着作用域链不断往上寻找
函数提升:程序执行前,会将整个函数提升到所在作用域的最前边,可以先写调用再写创建
二.递归
是在函数内部调用自身这个函数
特点:是一个死循环,使用不当会产生内存泄漏(内存占满)
用法: (1)找边界条件 (2)找规律 (3)都要结合return |
斐波那契数列:第1、2项的值是1,从第3项开始,每项的值是前两项相加的和
1 1 2 3 5 8 13 21
使用递归算法,计算出任意一项的值
三.匿名函数
function (){}
1.创建函数
函数声明 function fn(){ } |
函数表达式 var fun=function(){ } |
①对比函数名称()和函数名称的区别
函数名称() 调用函数,执行函数体中的代码
函数名称 本质上就是一个变量,保存了一个函数
②函数表达式和函数声明两种创建函数的区别
函数声明方式存在函数整体提升,可以先写调用再写创建
函数表达式只存在声明提升,必须先创建再调用
c() //5 var c=3 function c(){ console.log(5) } c() //报错 |
2.自调用
;(function(){ 函数作用域,变量局部变量,不存在全局污染 })() |
3.回调函数
把函数作为参数传递
function nan(){ } function tao(madai){ madai() //通过形参来调用传递的函数 } tao( nan ) tao( function(){ } ) |
四.系统函数
isNaN() 检测一个字符串中是否含有非数字,含有->true 不含有->false
eval() 执行字符串中的表达式
五.对象
对象是一组属性和方法的集合
一个手机,属性有颜色,尺寸,大小,品牌.. 方法有打电话,发短信,玩游戏….
,属性有身高,体重,肤色,发色…
万物皆对象
1.JS中的对象
自定义对象:用户创建的对象
内置对象:JS提供的对象
宿主对象:根据执行环境划分
2.自定义对象——对象字面量创建
{属性名: 属性值, 属性名: 属性值…}
属性名的引号可以不加,如果含有特殊字符必须添加
练习:创建一个员工对象,包含的属性有编号,姓名,性别,工资,部门名称
3.访问属性
对象.属性名
对象[‘属性名’]
如果属性不存在返回undefined
4.内置构造函数
new Object() 创建一个空对象,需要单独添加每个属性
5.遍历属性
循环访问每个属性
for-in
for(var k in 对象){ k 每个属性名 对象[k] 属性名对应的属性值 } |