一、函数表达式
将定义的函数赋给一个变量,通过变量完成函数的调用和参数传递(即函数是匿名的)
1.定义
var / let / const 变量名 = function(【参数】) {
函数体语句
}
2.调用
变量名(【参数】)
// 函数表达式:将一个匿名函数赋值给变量,函数的调用和参数传递是通过变量完成的
let min = function (val1,val2) {
if (val1 < val2) {
return val1;
} else {
return val2;
}
}
// 调用
let t = min(12,25);
console.log('最小数:'+t);
二、函数的递归调用
1.递归调用:函数自己调用自己(即在函数的函数体语句中调用自己)
2.递归算法:
(1)用递归方式解决问题的前提
a.问题可以进行分解,分解得到的新问题的解法与原问题的算法相同
8!--> 8 * 7!--> 7 * 6! -->......2! --> 2 * 1!
b.问题的分解过程必须有明确的结束条件
(2)递归的过程
a.自上而下分解问题:得到最简单的问题的解
b.自下而上回溯得到原问题的解
3.代码实现:
//用递归函数计算 n!
function fun(n) {
// 1.明确递归结束的条件
if (n == 1) {
return 1;
} else {
// 2.继续分解
return n * fun(n-1); //函数自己调用自己:在调用过程分解问题
}
}
let t = fun(5);
console.log(t);
练习1:定义一个函数,计算1+2+3+4+...+100的值
// 定义一个函数,计算1+2+3+4+...+100的值
function fun(n) {
// 1.明确递归结束的条件
if (n == 1) {
return 1;
} else {
// 2.继续分解
return n + fun(n-1); //函数自己调用自己:在调用过程分解问题
}
}
let t = fun(100);
console.log(t);
三、对象
1.什么是对象
对象是一种数据类型(复合数据类型),对象中包含了属性和方法
-
属性:表示对象的静态特征,使用方法为:对象名.属性名
-
方法(函数):宝石对象的行为(动态特征),使用方式:对象名.方法名(【参数】)
2.对象的创建方式
(1)使用字面量创建:{ }
let / var / const 对象名 = { };
let student = {
no:'wn001',
name:'马云',
sex:'男',
eat:function(){
console.log('马云在吃包子');
},
sleep:function(){
console.log('马云在睡觉');
}
}
// 对象的属性和方法的使用
console.log('姓名:',student.name);
console.log('性别:',student.sex);
student.eat();
student.sleep();
说明:
-
保存数据的个数:键:值(key :value)称为“键值对”
-
在程序中也可以创建空对象:对象名:{},没有属性没有方法
-
给对象添加属性、方法
(2)通过Object来创建对象
-
Object对象:是JavaScript中所有对象的基类
-
创建空对象:new Object()
let obj = new Object();
// console.log(obj);
obj.name = '诸葛亮';
obj.sex = '男';
obj.info = function (m,n,t) {
console.log('空城计');
}
console.log(obj);
(3)利用构造函数创建对象
1.构造函数:是一个函数(定义方式和普通函数定义方式一样)
function 构造函数名 (【参数】) {
this.属性名 = 属性值
this.方法名 = function (【参数】){
方法体语句
}
}
建议:构造方法名的首字母大写
定义构造方法就是画图纸的过程,通过构造方法创建对象(new 构造方法名()) 就是根据图纸生成对象的过程
2.通过构造方法创建对象:new 构造方法名(【参数】)
3.对象使用属性和方法:
对象名.属性
对象名.方法名(【参数】)
//1.定义一个构造方法:包含name、sex、address三个属性,setName(name)、setSex(sex)、setAddress(address)三个方法
function Student(){ //类似于画图纸
this.name = '王昭君'
this.sex = '女'
this.address = '西安'
this.setName = function(name){
this.name = name
}
this.setSex = function(sex){
this.sex = sex
}
this.setAddress = function(address){
this.address = address
}
}
//2.利用构造方法创建对象
let s1 = new Student() //强调:构造方法中的this代表当前创建的对象s1
console.log('姓名:',s1.name)
console.log('性别:',s1.sex)
console.log('地址:',s1.address)
let s2 = new Student() //this代表s2
s2.setName('西施')
console.log('姓名:',s2.name)
强调:this代表的是由构造方法创建的对象