首页 > 其他分享 >函数(概念、使用、参数、return、argument、函数方法、嵌套函数、立即执行函数)

函数(概念、使用、参数、return、argument、函数方法、嵌套函数、立即执行函数)

时间:2024-11-12 09:46:21浏览次数:3  
标签:return 函数 形参 对象 argument 调用函数 实参

一、函数的概念

函数:就是封装一段可被重复调用执行的代码块。通过代码块可以实现在需要的的重复使用,使用typeof检查一个函数对象时,会返回function

函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,简单理解:将很多衣服打包到一个行李箱,jQuery就是一个函数封装库,对外暴露一个顶级对象$

二、函数的使用

函数在使用时分为两步:声明函数和调用函数

声明函数(创建函数)三种方式

第一种方式 创建一个构造函数对象

我们在实际开发中很少使用构造函数来创建一个函数对象

可以将要封装的代码以字符串的形式传递给构造函数

封装到函数中的代码不会立即执行,函数中的代码会在函数调用的时候执行

var fun = new Function("console.log('hello 这是我的第一个函数')");
console.log(typeof fun);//function
fun();

第二种方式 使用函数声明来创建一个函数(常用)

function 函数名([形参1,形参2,形参3,形参4....形参n]){

执行语句.....

}

 function fun2() {
    console.log("这是我的第二个函数~~~");
    alert("hahahaha");
    document.write("wuwuwuwu");
  }

第三种方式 使用函数表达式来创建一个函数 (匿名函数)

var 变量名=function([形参1,形参2,形参3,形参4....形参n]){

语句.....

}

注意:变量名不是函数名

var fun3 = function () {
    console.log("我是匿名函数中的封装的代码");
}; //相当于赋值语句
fun3(); //调用函数

注意:

由于函数一般是为了实现某个功能才定义的,所以通常我们将函数名命名为动词,例如getsum

调用函数

调用函数语法:变量名/函数名()

当调用函数时,函数中封装的代码会按照顺序执行

三、函数的参数

形参

形式上的参数,函数定义的时候,传递的参数,当前并不知道是什么,用来接收实参的,形参类似一个变量,声明了并未赋值多个形参之间用逗号隔开

实参

实际上的参数,函数调用的时候传递的参数,实参是传递给形参,相当于给形参赋值

参数的作用

在函数内部某些值不能固定的时候,我们可以通过参数在调用函数时传递不同的值进去

语法结构:

function 函数名(形参1,形参2····形参n){//声明函数的小括号里的是形参(形式上的参数)

执行语句.....

}

函数名(实参1,实参2····)//在函数调用的小括号里面是实参(实际参数)

形参和实参匹配的问题

  • 如果形参和实参的个数一致,则正常输出结果
  • 如果实参的个数多于形参的个数,会取形参的个数
  • 如果实参的个数小于形参的个数,多余的形参默认定义为undefined
  • 调用函数时,解析器不会检查实参的类型,所以要注意,是否有可能会接收到非法的参数,函数的实参可以是任意的数据类型

建议形参和实参个数一致

实参可以是任何类型

——可以是一个对象,当我们的参数过多时,可以将参数封装到一个对象中,然后通过对象传递

——实参可以是一个对象,也可以是一个函数

四、函数的返回值return

1、返回值语法结构

function 函数名(){

return 需要返回的结果

}

函数名()

2、返回值注意事项

  • 函数只是实现某种功能,最终的结果需要返回给函数的调用者(谁调用函数,函数实现结果功能反馈给谁),函数名()=return 后面的结果,通过return实现的;可以定义一个变量,让return来接受该结果
  • 在函数中,return之后的语句就都不会执行,有终止函数的作用
  • return只能返回一个值,多个值,返回的是最后一个值。如果有需求返回多个值,可以将多个值放入数组或者对象里
  • return后可以跟任意类型的值
  • 如果return后不跟任何值,就相当于返回一个undefined
  • 如果函数中不写return,则也会返回undefined

3、返回值类型

返回值可以是任意的数据类型, 也可以是一个对象 ,函数

4、break、continue、return的区别

  • break:结束当前的循环体(for、while)
  • continue:跳出本次循环,继续执行下次循环(for、while)
  • return:结束当前循环体,return后的语句不会执行, return函数的结果

五、arguments的使用

在调用函数时,浏览器每次都会传递两个隐含的参数:

1:函数的上下文对象 this

2:封装实参的对象 arguments

当我们不确定有多少个参数传递的时候,可以使用arguments来获取,在JS中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。

(1)、arguments 是一个类(伪)数组对象

它可以通过索引来操作数据,通过arguments.length可以获取实参的长度获取长度

伪数组并不是真正意义上的数组

  • 具有数组的length属性
  • 它没有真正数组的一些方法
  • 按照索引的顺序进行存储的

(2)、在调用函数时,我们所传递的实参都会在arguments中保存

(3)、我们即使不定义形参,也可以通过grguments来使用实参,只不过比较麻烦

arguments[0]表示第一个实参

arguments[1]表示第二个实参

(4)、arguments有个属性叫callee,

这个属性对应一个函数对象,就是当前正在指向函数的对象

六、函数方法call()、apply()、bind()

这两个方法都是函数对象的方法,需要通过函数对象来调用

-当对函数调用call()和apply()方法时,都会调用函数执行

-在调用call和apply()可以将一个对象指定为第一个参数, 此时这个对象将会成为函数执行的this

-call()方法可以将实参在对象之后一个个传递

apply()方法需要将实参封装到一个数组中统一传递

总结this的情况

1.以函数形式调用时,this永远是window

2.以方法的形式调用时,this是调用方法的对象

3.以构造函数的形式调用时,this是新创建的那个实例对象

4.使用call和apply调用时,this是指定的那个对象,如果不写第一参数,默认是window

七、函数嵌套函数

每个函数都是独立的代码块,用于完成特殊任务,因此经常会用到函数相互调用的情况

一般情况下,一个函数只做一件事

八、立即执行函数

//第一种写法:常用
//外面的()是把整个函数当作函数名,后面的()是调用函数的意思
(function () {
  console.log(111);
})();
// console.log(1111);

//第二种写法
(
  function () {
    console.log(2222);
  }()
)

标签:return,函数,形参,对象,argument,调用函数,实参
From: https://blog.csdn.net/m0_63346819/article/details/143700214

相关文章

  • 【C++】模板(一):函数模板
    大家好,我是苏貝,本篇博客带大家了解C++的函数模板,如果你觉得我写的还不错的话,可以给我一个赞......
  • 变量提升与函数提升
    首先看一道计算题,你知道他的打印结果吗?console.log(a);vara=1;console.log(a);getName();functiongetName(){console.log(a)console.log(b)a=2console.log(a)varb=3console.log(b)functionb(){}}结果......
  • 细节解析 JavaScript 中 bind 函数的模拟实现
    大家的阅读是我发帖的动力,本文首发于我的博客:deerblog.gu-nami.com/,欢迎大家来玩,转载请注明出处喵。......
  • 编写函数:递归求逆序 (Append Code) ★
    Description将输入的一个字符串s逆序输出。编写函数recursive()完成程序:原型:intrecursive();功能:用递归的方法读取输入,并且逆序输出。函数的调用格式见“AppendCode”。InvalidWord(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下......
  • Java Lambda表达式与函数式接口和Stream API的常用方法
    JavaLambda表达式常与函数式接口和流(StreamAPI)一起使用,提供了非常强大的方式来处理集合和其他数据结构。以下是一些常用的Lambda表达式方法和它们的用途,特别是在结合java.util.stream.Stream时:1.map()用途:用于将流中的每个元素转换成另一种形式。示例:List<String>name......
  • c语言入门第六天输入函数
    一:字符输入函数a:字符输入函数格式为getchar();b:功能:从键盘输入一字符c:返回值:正常,返回从键盘输入的代码值,出错或结束返回-1d:代码展示输出单一字符2:格式输入函数a:格式:scanf("格式控制符",地址表)b:功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回......
  • C++ lower_bound 函数用法
    C++lower_bound函数用法因为文本块不支持下划线,所以以下均打成\(\text{lower-bound}\)。虽然只是简单语法,但是我确实不太能记住。比如很多分块题要求在整块二分,此时如果能善用\(\text{lower-bound}\)函数就能少写一个二分。然后本文只是作者自己看源代码理解的,当然是有不......
  • 第五节---查询---函数
    查询---语法一.显示(limit)limit语句---limit显示语句条数;limit1;---只显示一条语句limit2;---显示三条语句limit语句---limit从第几项开始,获取后面几项;limit1,3;---显示第1条语句后的3条语句先排序后查询orderby列段名desclimit2;limit语句......
  • 在C语言中用函数求fibonacci(斐波那契)数列前n项的和
    1.功能用函数求fibonacci数列前n项的和。2.说明fibonacci数列为数列的第一项值为1,第二项值也为1,从第三项开始,每一项均为其前面相邻两项的和。3.题目例如:当n=28时,运行结果:832039。请编写sum函数。#include<stdio.h>//函数sum用于计算斐波那契数列前n项的和longsum......
  • 【C++】踏上C++的学习之旅(七):深入“类和对象“世界,掌握编程的黄金法则(二)(内含构造函数
    文章目录前言1.类的6个默认的成员函数2.构造函数和析构函数的“好处”3.构造函数3.1概念3.2构造函数的特性4.析构函数4.1概念4.2特征前言在踏上C++的学习之旅(六):深入“类和对象“世界,掌握编程的黄金法则(一)中,我给大家讲解了"类"的定义以及如何使用类创建出......