一、函数
1. 构造一个函数
- 语法:function 函数名(变量,变量,…){}
2. return:可以使用return来设置函数的返回值
- 语法:return n;
- return后的值将会作为函数的执行结果返回,可以定义一个变量来接收这个结果
- 在函数中,return后的语句都不会执行了 如果return后面不跟任何值或者函数中不写return,函数将返回undefined
- return后面可以跟任意类型的值
- return & continur & break:
使用break可以退出当前函数,continue用于跳过当前函数,return可以结束整个函数
3. 调用函数
- 接收return的变量的值就是函数的执行结果,函数返回什么变量的值就是什么
4. 实参
- 实参可以是任意类型的数据类型,也可以是一个对象,当我们的参数过多的时候,可以将参数封装到一个对象中,然后通过对象传递
- 实参也可以是一个函数
5. 区分function和function()
6. 立即执行函数
- 函数定义完,立即被调用。这种函数往往只使用一次
- 语法:(function(形参,形参){})(实参,实参);
7. 函数也可以成为对象的属性
- 如果一个函数作为一个对象的属性保存,那么我们称这个函数是这个对象的方法,调用函数就是调用对象的方法(method)
- 但“调用函数”和“调用方法”都只是名称上的区别,实质上没有任何区别
8. 枚举对象中的属性:使用for…in语句
- 语法:for(var 变量 in 对象){}
- 在for…in语句中,对象中有几个属性,循环体就会执行几次
- 每次循环时,会将对象中的一个属性名赋值给变量
9. 函数的声明提前
- 使用函数声明形式创建的函数【function 函数(){}】,在所有的代码执行之前就被执行,可以在函数声明前来调用函数
- 使用函数表达式创建的函数【var 变量 = function(){}】不会被声明提前,不能在声明前调用
function number(a){
if(a%2==0){
var result = true;
}else{
var result = false;
}
return result;
}
console.log(number(10));
function circle(r){
s = 3.14 * r * r;
return s;
}
var s = circle(10);
console.log("r="+s);
function fun(a){
console.log("a="+a);
}
function todo(b){
return b(5);
}
function sayHello(o){
console.log("我是"+o.name+"今年"+o.age+"岁了,是个"+o.gender+"生,家在"+o.address);
}
var obj = {
name:"sun",
age:18,
gender:"男",
address:"jinan"
}
fun(sayHello(obj));
fun(number(2));
fun(number);
var d = todo(circle);
console.log("d="+d);
(function(a,b){
console.log("我是一个立即执行函数");
console.log("a = "+a);
console.log("b = "+b);
})(2,3);
for(var n in obj){
console.log("属性名:"+n,"属性值:"+obj[n]);
console.log("属性值:"+obj.n);
console.log("属性值:"+obj["n"]);
}
console.log("函数声明提前")
aa();
function aa(){
console.log("我是aa函数");
}
var bb = function(){
console.log("我是bb函数");
}
二、构造函数
1. 创建一个构造函数,专门用来创建Person对象的
- 构造函数就是一个普通的函数,创建的方式和普通函数没有区别,不同的是构造函数习惯上首字母大写
2. 构造函数和普通函数的区别就是调用方式的不同
- 普通函数是直接调用,而构造函数需要使用new关键字来调用
3. 构造函数的执行流程:
- 1.立刻创建一个新的对象
- 2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象
- 3.逐行执行函数中的代码
- 4.将新建的对象作为返回值返回
4. 理解:
- new一个对象的时候,会在堆中开辟一块新区域(new Person()会在堆中开辟一块新区域)
- 这片区域保存Person函数的内容
- 这块区域的地址赋值给son
- this是保存在栈中的,执行构造函数的时候,this也保存了那片区域的地址
5. 使用同一个构造函数创建的对象,称为一类对象,也将一个构造函数称为一个类
6. this的情况:
- 1.当以函数的形式调用时,this就是window
- 2.当以方法的形式调用时,谁调用方法this就是谁
- 3.当以构造函数的形式调用时,this就是新创建的那个对象
function Person(a, b, c, d){
this.a = a;
this.b = b;
this.c = c;
this.hH = function(){
console.log("d:",d);
};
}
var per = Person("lala", 18, "nan","111");
var son = new Person("byhg", 16, "nv","222");
console.log("per:", per);
console.log("son:", son);