一、函数
- 概念 :代码中的工具
- 内置函数 :js内部提供的 ①isNaN() ② Number() ③ parseInt() 等等等
- 自定义函数 :自己定义,自己使用
二、语法
- 定义: function 函数名(){重复执行的代码段}
- 调用 :函数名()
三、函数的本质
- 定义函数 :就是在内存中开辟空间,存储一段代码进入
- 存储的代码的数据类型 :function
- 将函数理解为一个特殊的变量
- 数据 — 一段代码
- 类型 — function
- 调用 — 让这段代码执行
四、带参数的函数
- 形参 ---- 在定义函数的小括号中,可以放入多个预定义好的变量 ----- 在函数内占位,准备使用
- 实参 ---- 给形参赋值,让形参在函数内有具体的数据
五、函数带返回值
当我们调用函数后,需要得到一个结果
就需要在函数内 return 结果
return后面的代码不执行
六、预解析
- 代码在执行之前,会先进行解析
- 会在所有代码中找 变量的定义 和 函数的定义,找到后将变量的定义和函数定义放在所有代码的最前面
- 当预解析的变量名和函数名同名 — 保留函数名,忽略掉变量
- 只会提升定义,不会提升赋值
- 函数定义会提升,变量赋值一个函数不会当做函数的提升
- 报错后的代码不执行的
- 不会执行的代码中有定义,也会提升
七、嵌套和调试
函数 大括号中可以放任意代码
- 可以有函数定义
- 可以有函数调用
八、作用域
概念 :起到作用的区域
- 全局 — 整个网页 — 定义的变量 — 全局变量 — 作用域是整个网页
- 局部 — 函数内 — 定义的变量 — 局部变量 ---- 只能在函数内起到作用
局部可以访问到全局的变量,全局不能访问局部的变量
九、作用域链
概念 :作用域多重嵌套形成的链式结构
- 规则1:在任何地方把变量当做数据使用的时候,先在当前作用域中找这个变量的定义, 找到了就使用,找不到就去上级作用域中找,找到了就使用, 找不到就再去上级 作用域中找,。。。,直到全局,全局找到了,就使用全局变量,找不到就报错
- 规则2:在任何地方给变量赋值的视时候,先在当前作用域中找这个变量的定义,找到了 就赋值,找不到就去上级作用域中找, 找到了,就赋值,找不到就再去上级作用 域中找…直到全局,全局找到了就给全局变量赋值,找不到就在全局定 义这个变量并赋值
十、递归函数
概念 : 在函数内调用自己
function fn(n) {
if(n === 1){
return 1
}
return n + fn(n-1)
}
var sum = fn(5)
console.log(sum)
斐波那契
function fn(n) {
if(n === 1 || n === 2) {
return 1
}
return fn(n-1) + fn(n-2)
}
var num = fn(10)
console.log(num)
十一、事件
-
概念 :处理用户在网页中行为的代码
-
语法
标签.on类型 = 函数代码
- 标签:可以直接使用标签的id名在js中代表这个标签
- 类型
- 鼠标类
- 单击 click
- 双击 dbclick
- 移入 mouseover
- 移出 mouseout
- 键盘类
- 按下 keydown
- 抬起 keyup
- 表单类
- 获取焦点 focus
- 失去焦点 blur
- 状态改变 change
- 表单提交 submit
- window — load — 网页中其他资源都加载完成后再加载这个事件中的内容
- 鼠标类
- 函数代码
- 匿名函数
- 函数名称 ---- 不要调用
-
行内写法
<标签 on类型="函数()/js代码"></标签>
十二、对象
-
概念 :复杂的数据 — 一个空间中存储多个数据
-
定义
var obj = {} var obj = new Object()
-
定义有数据的对象 — 键值对组成
- 键 — 本质都是字符串
- 一般不加引号
- 当键中包含连字符的时候,就必须加引号
- 值 — 什么类型都可以
- 键 — 本质都是字符串
-
基本操作
-
访问
- 对象.属性名
- 对象[‘属性名’]
-
设置
- 对象.属性名 = 值
- 对象[‘属性名’] = 值
对象中的键是唯一的
设置的属性在对象中存在了 — 修改值
设置的属性名在对象中还不存在 — 新增键值对
-
删除
- delete 对象.属性名
- delete 对象[‘属性名’]
-
-
遍历
将对象中的每个键值对都经历一次 ----
for(var 变量 in 对象) { 变量代表每个键 }