快速过一遍JavaScript(七)·函数

一、函数

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()

  • 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();
	// bb();
	
	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);

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值