8-1js基础之函数的分类

本文详细介绍了JavaScript中的六种函数类型:递归函数、匿名函数、自执行函数、回调函数、闭包函数和构造函数。递归函数用于解决如斐波那契数列等问题;匿名函数主要用作表达式,避免变量污染;自执行函数创建独立作用域,防止全局变量冲突;回调函数作为参数传递,常用于API交互;闭包提供访问函数内部变量的桥梁;构造函数用于创建对象,区分系统内置和自定义,通过new关键字实例化对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数的分类

  • 函数分为系统内置构造函数和自定义构造函数。

一. 递归函数

  • 概念:就是在函数中自己调用自己。
function fn1(){
		if(a<1){
			return a;
		}else {
			return fn1(a-1);
		}
	}
	var  a = fn1(5);consol.log(a)//1
  • 应用案例:斐波那契数列;需求: 传入一个数值,返回当前数值对应位置的数列里面的值
//斐波那契数列
//需求:传人一个数值,返回当前数值对应位置的数列里面的值
//如果能理解,则理解,理解不了就背下来
	function fib(num){
		if(num==0){
			return 0;
		}
		if(num == 1){   
		console.log(111return 1;
		}
		retuen fib(num-2) + fib(num-1) ;
	}
	var b= fib(6);
	console.log(b)

二.匿名函数

  • 概念:
    • 匿名函数就是没有名字的函数。
    • 如果使用函数表达式的形式创建了一个函数,那么函数最好是一个匿名函数。
    • 如果函数设置了函数名,那么这个函数名也不能够在函数外部使用,只能在函数内部使用。在函数内部,函数名和存储函数的变量是一样的效果。
    var a = functin n(){
    	console.log(n)//代码体
    	console.log(a)//代码体
    	console.log('hello,world');
    } 
    console.log(a)//函数体
    console.log(n)//报错
    a()//执行
    n()//报错
    

三.自执行函数

  • 概念:通过匿名函数实现的一个。
  • 语法:
    - ()() --》(function(){})()
    - (function(){console.log(“123”)})()//会自动执行
  • 括号的解释:第一个括号的作用是让函数变成表达式,第二个括号作用是让函数自动执行
  • 作用:相当于创建了一个独立的空间,可以避免变量污染
(function(a接收的形参){
			console.log(223)->执行的代码
	})(123->输入的实参)
	//——————————————————————————————————————————
	var fn1 = (function(){
		console.log('123');
		return function(){
			console.log('3656')
		}
	})()
	console.log();fn1()

四.回调函数(api比比皆是,js当中非常重要的一点)

  • 概念:把一个函数当做一个参数传递给另外一个函数,并且在另外一个函数当中去调用这个函数。
  • 写法:js当中的函数并没有关于参数类型的限制
	第一种写法
			在传参的时候写一个匿名函数
	1.function fn1(parm1,parm2){
		parm2(parm1)
		console.log(parm1)//打印parm1的值
		console.log(parm2)//打印parm2的值
	}
	fn1('你好',function(str) {console.log})//结果:你好
	第二种写法
			直接把函数名提出来在外边写函数,把函数名传进来
	2.function fn1(parm1,parm2){
		parm2(parm1)
	}
	function write(str) {console.log(str)}
	fn1('你好',write)//结果:你好

五.闭包函数(js当中非常重要的一点)

  • 闭包函数概念:当一个函数当中嵌套了另外一个函数,并且把这个函数返回,那么此时返回到函数外部的这个函数,将可以直接访问它所在作用域的全部变量。这样,通过函数嵌套的形式就形成了函数内部和函数外部的一个桥梁,从而让函数外部可以访问函数内部的所有的变量。 简单点说,当一个函数中返回了另外一个函数,这种形式即是闭包。闭包函数可以让函数外部访问函数内部的数据。
  • 代码
function fn1(){
		var s1 = 'hello';
		var s2 = 'world';
		return function(par){
			<!-- var c = s1 +s2; -->
			return  s1 + '' + s2 + par;
		}
	}
	fn1()('!')//调用闭包函数
	console.log(fn1)//fn1的全部函数体
	var a = fn1()('!')
	console.log(a)//结果hello world!
  • 闭包函数缺点:程序长占内存,不会被销毁。容易产生内存溢出,造成数据丢失
  • 垃圾回收机制:判断这个东西有没有用,如果没有用在回收

六.构造函数(js当中非常重要的一点) —对象中常用

  • 概念:js当中存在诸多的数据类型,本质来说,除了null和undefined,所有的数据都是由构造函数创建出来的,采用不同的构造函数可以创建出不同类型的数据,在js中,除了null和undefined,所有的数据都可以通过构造函数的形式创建。
  • 构造函数的直接量
    • 直接量–创建数据的一种快捷方式var str1 = new String("hello,world"); // 构造函数实例化
  • 构造函数的分类:
    • 系统内置构造函数(js内置)和自定义构造函数。
      • 自定义构造函数注意点:
        • 注意1:函数名-需要采用大驼峰命名法
        • 注意2:使用函数的时候需要采用new 的形式创建出来,并且都是对象类型。
        • 注意3:变量接收的不再是返回值,而是构造函数创建出来的一个对象
        • 注意4:在构造函数当中,通过this.给未来的对象赋值
        • 注意5:构造函数当中一般不设置return
        • new的这种操作称之为实例化
  • 构造函数的代码
function Person(name,age,sex,like){
		// 赋值
		// console.log(this)
		// 在构造函数当中,this表示通过构造函数在未来创建的那个对象。
		this.username = name;
		this.userage = age;
		this.usersex = sex;
		this.like = like;
	}
	var val = new Person('张三',30,'男','玩') // 变量接受的 是通过构造函数创建出来的一个对象
	// console.log(typeof(val)); object
	// console.log(val) //数据
	// console.log(val.username);//张三
	// console.log(val.userage);//30
	-
	var lisi = new Person('李四',29,'女','旅游');
	// 通过构造函数实例化创建出来的每一个对象都是不等的。
	console.log(lisi === val);// false
	console.log(lisi.username)//李四
  • 构造函数的对象—结合引用数据类型中的对象看
// 通过构造函数创建一个对象,并且这个对象当中还要包含属性和方法
function Person(name,age,sex) {
    // 赋值 
    this.name = name;
    this.age = age;
    this.sex = sex; 
    // 定义方法 
    this.sayHello = function(param) {
        alert('你好 ,' + param);
    }
    this.showName = function() {
        alert('你好,我的名字叫' + this.name + ",我的年纪是" + this.age + ",我的性别是你自己看看");
    }
}
var zhangsan = new Person('张三',30,'男');
zhangsan.sayHello('尼古拉斯赵四');
zhangsan.showName();
对象调用方法的时候只能采用:变量名.函数名();如zhangsan.showName()

七.补充:构造函数和普通函数的区别

1. 调用方式不同,需要通过new 的形式来调用
2. 函数命名不同,采用大驼峰命名法 
3. 函数里面this不同,普通函数当中this其实表示的是window,而在构造函数当中this表示未来的对象
4. 普通函数会用到返回值,但是构造函数当中返回值使用较少甚至不使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值