01-练习
输出0-3的组合数中的奇数
<script>
function fn(n, m) {
for (var i = n; i <= m; i++) {
for (var j = n; j <= m; j++) {
// console.log(i * 10 + j)
var res = i * 10 + j
if (res % 2 !== 0) {
console.log(res)
}
}
}
}
fn(0, 3)
</script>
02-作用域
含义,写法
<script>
// 作用域
// - 产生作用的范围
// 全局变量
// - 谁都可以使用
// - 生命周期:开启页面到关闭页面(会话级)
var a = 100
function fn() {
console.log(a) // 100
}
fn()
function fun() {
// 局部变量
// - 只有函数内部可以使用
// - 生命周期:函数执行完立即消失
var b = 100
}
fun()
console.log(b) // 报错
</script>
03-作用域链
作用域链
- 先看自己有没有,自己没有看父函数有没有,父函数没有一直往上找,找到全局,全局没有报错
举例
var a = 100
function fn() {
var a = 200
function fn2() {
var a = 300
function fn3() {
var a = 400
console.log(a) // 400
}
fn3()
}
fn2()
}
fn()
04-递归
含义
递归
- 循环调用
- 自己调用自己
- 函数的高阶调用方式
- 递归要先写结束
例子
var count = 0
function fn() {
count++
console.log(count)
if (count === 3) {
return
}
fn()
}
fn()
04-递归2
1-7的阶乘
function fn(n) {
if (n === 1) {
return 1
}
// 函数() -> 乘法 —> return
return n * fn(n - 1)
}
var n = fn(7)
console.log(n)
04-递归3
斐波那契数列
1 1 2 3 5 8 13 21 34 55 89 144
兔子算法
1. 不会死
2. 近亲可以结婚
3. 小兔子第三个月长大,就可以生小兔子,一次生一对,一个月生一次
12: 1440
24: 463680
36: 149303520
48:
递归的性能非常高,但是少用(你用不好)
算法
var count = 0
function fn(n) {
count++
if (n === 1 || n === 2) {
return 1
}
return fn(n - 1) + fn(n - 2)
}
var n = fn(36)
console.log(n)
console.log(count) // 29860703 次数
05-对象
含义
对象
- Object
- JS O N JS的一种数据结果表
- 无序数据集合
- { str: 'hello', num: 100, flag: true, un: undefined, fn: function () {}, children: {} }
- { 属性名:属性值,属性名:属性值,属性名:属性值 ... }
数据类型
复杂数据类型:function object
基本数据类型:number string boolean null undefined
写法
// 字面量
var obj = {}
// 添加内容
obj.name = 'Jack'
obj.age = 18
console.log(obj)
// 构造函数
var obj2 = new Object()
obj2.name = 'Rose'
obj2.age = 80
console.log(obj2)
06-对象使用
增删改查
// object
// - 操作
// - CRUD 增删改查
var obj = {
name: '张三',
age: 18
}
// 增加
obj.job = '放牛'
// 改
obj.age = 20
// 查
console.log(obj.name) // 张三
console.log(obj.aaa) // undefined
// 删
delete obj.job
console.log(obj)
例子
请用对象介绍自己
- 你叫什么、年龄、性别、学号、家庭地址
var obj = {
name: '高旭',
age: 18,
age: '男',
id: 9527,
address: '沈阳浑南'
}
console.log(obj)
06-对象使用2
练习a
请用对象介绍自己
- 你叫什么、年龄、性别、学号、家庭地址
var obj = {}
obj.name = 'Abel'
obj.age = 20
obj.sex = '男'
obj.address = '沈阳浑南'
console.log(obj)
练习b
小明今年22岁家住杭州是一名前端工程师,家里有俩姐姐,大姐叫小红今年28岁是一名产品经理,二姐叫小美今年26岁是一名UI设计师
var sister1 = {
name: '小红',
age: 28,
job: '产品经理'
}
var sister2 = {
name: '小美',
age: 26,
job: 'UI'
}
var obj = {
name: '小明',
age: 22,
address: '杭州',
job: '前端',
family: {
sister1: sister1,
sister2: sister2
}
}
console.log(obj)
07-对象循环的使用
<script>
var obj = {
name: 'Jack',
age: 18,
id: 9527
}
console.log(obj)
// console.log(obj.name)
// console.log(obj.age)
// console.log(obj.id)
// 循环
// - for in
for (var aaa in obj) {
// console.log(aaa) // 属性名
// console.log(obj[aaa]) // 属性值
}
</script>
08-对象真正的写法
<script>
// 无序数据集合
var obj = {
"name": "Jack",
"age": 18,
"id": 9527
}
console.log(obj)
// console.log(obj.name)
// console.log(obj["name"])
for (var attr in obj) {
// console.log(attr) // "name" "age" "id"
console.log(obj[attr])
}
</script>
09-开发一个项目的过程
开发一个项目:项目经理
产品(画原型图)-> UI(设计图) -> 前端(前端管后台要数据)后端 -> 测试 -> 前端(改bug) 后端(改bug) -> 运维(上线)
10-递归对象
<script>
var obj = {
value: 0,
children: {
value: 1,
children: {
value: 2,
children: {
value: 3,
children: {
value: 4
}
}
}
}
}
// 递归
// - 数据层数不固定使用递归
function fn(obj) {
console.log(obj.value)
if (obj.children !== undefined) {
fn(obj.children)
}
}
fn(obj)
</script>
11-数组
含义,写法
<script>
// 数组
// - 有序数据集合
// - [12, 5, 7, 99, 103]
// arguemnts 伪数组 没有方法 有下标和长度
// var arr = [12, 5, 7, 99, 103]
// // 方法
// arr.push(1000)
// console.log(arr)
// console.log(arr.length)
// console.log(arr[2])
// 添加30个偶数
var arr = []
for (var i = 2; i <= 60; i += 2) {
arr.push(i)
}
console.log(arr)
</script>