0.前言
不管在何种计算机语言中,函数都可以算做事一个难点,它是我们实现功能的基本要素条件,要有一定的逻辑思维,可能有的同学感觉到好难,可是它又是非常简单的,只要掌握要领,实现起来一点也不困难。我们从下面几点来学习函数:
- 函数的基本概述;
- 最简单的函数(无参无返回值);
- 函数的参数;
- 函数的返回值;
- 变量的作用域;
- 变量的提升;
- 函数也是一种数据;
- 匿名函数;
- 即时函数;
1.函数的基本概述
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。
-----百度
<strong>认识函数:</strong>在一个完整的项目中,某些功能会被反复的使用到,那么我们就将该功能封装进一个函数,当要使用该功能时,直接调用函数即可。
注:函数是对功能的封装
<strong>优点:</strong>
1、节省代码,使程序结构简单易懂,提高代码的复用度(重复利用的程度)。
2、如果修改某个功能、调试某个BUG,只需要对应修改函数即可。
<strong>(1)函数的概述(函数的声明、函数的定义):</strong>
function 函数名(参数列表){
语句;
return 表达式;
}
<strong>解释说明:</strong>
function:函数的关键字,说明这是一个函数。
函数名:遵守标识符的规则。
():参数列表的开始和结束。
参数列表:是函数从函数的调用者那里获取的数据,可以没有参数。
{}:函数体的开始和结束。
语句:函数封装的功能。
return 表达式;:return是给函数的调用者返回数据用,返回的数据为"表达式"的值,返回到调用函数的地方。return 表达式;可以不显示的写出来,如果没有默认返回undefined。
注意:函数声明之后不会被执行的,只是声明了一个有该功能的函数。
函数的调用(格式):函数名(参数列表);
函数名:具有某种功能的函数的名字;
参数列表:是调用者给函数的数据。
2.最简单的函数(无参无返回值)
//函数的调用
//函数的调用可以在函数的声明之前。
introduce();
//编写函数,说明以下自己的人格魅力
//最简单的函数:没有参数,没有返回值
//函数的声明、函数的定义
function introduce() {
console.log("sunck is a good man!");
console.log("sunck is a nice man!");
console.log("sunck is a handsome man!");
console.log("sunck is a clever man!");
console.log("sunck is a noble man!");
}
//函数的调用
introduce();
3.函数的参数
//编写函数,实现给函数一个字符串,在函数内部打印出来
//参数可以有多个,多个参数之间用逗号分隔
//此时str和age称为形式参数(形参),本质是变量
function myConsole(str, age) {
console.log(str+"he is "+age);
}
//调用函数传的参数称为实际参数(实参),本质是值
//函数调用的本质就是实参给形参赋值的过程(对应赋值)
myConsole("sunck is a good man!", 18, "nice", "handsome");
//注意:函数接收参数没有任何顾虑,可以接收任意多个
//arguments:以后说
4.函数的返回值
用实例:
<script type="text/javascript">
//编写函数,实现计算两个数的和,结果返回给调用者
function mySum(num1, num2) {
var sum = num1 + num2;
// console.log(sum);//在功能函数中尽量避免打印
return sum;//结束函数的
}
//接收了函数的返回值的值
var ret = mySum(5, 6);
</script>
5.变量的作用域
变量的作用域:变量能使用的范围。
全局变量:
定义位置:所有函数以外定义的变量
作用域:那里都能用(这句话不严谨,有瑕疵)。
局部变量:
定义位置:函数内用var定义的变量
作用域:在定义的当前函数内可以使用
var num = 10;
function f(){
num2 = 30;//定义变量,不用var定义的变量默认为全局变量
//函数内部可以访问全局变量
console.log(num);
num++;
var num1 = 20;
console.log(num1);
}
//调用
f();
console.log(num);
//找不到名为num1的变量,此时这个num1是函数f中的局部变量
//console.log(num1);
//
console.log(num2);
6.变量的提升
var num = 10;
//当程序进入一个新的函数时,会将该函数中所有的变量的声明放在函数开始的位置。仅仅会提升变量的声明,不会提升变量的赋值。
function f() {
console.log("3**" + num);
//当局部变量与全局变量同名时,优先使用局部变量
var num = 20;
console.log("1**" + num);
}
//下面的代码诠释上面的代码
// function f() {
// var num;
// console.log("3**" + num);
// //当局部变量与全局变量同名时,优先使用局部变量
// num = 20;
// console.log("1**" + num);
// }
f();
//使用的是全局变量的num
console.log("2**" + num);
7.函数也是一种数据
用变量保存函数,可以通过变量访问函数(调用函数),并且通过标量执行函数(访问函数、调用函数),格式:
变量名(参数列表)
案例:
function fun() {
console.log("sunck is a good man");
}
var f = fun;
f();
//fun();
<strong>函数可以作为参数传递</strong>
案例:
var p = function a(s, n) {
return s + n;
};
function m(mySum, q, w) {
return mySum(q, w);
}
var ret = m(p, 1, 2);
console.log(ret);
讲解:首先ret接收函数的返回值,同时调用m函数,并传递3个参数,所以此时mySum = p;return mySum(q, w);相当于return p(q, w);,此时调用p函数,并传参,而返回值就传递给了m,m再传递给ret,并打印。
8.匿名函数
顾名思义,就是没有函数名的函数。没有函数名,如何进行调用呢?因此需要一个变量来保存这个函数,同时用变量进行函数的调用。
var a = function (){
console.log("sunck is a good man");
};
a();
当匿名函数没有赋值给另一个变量时有两种优雅的用法
1、直接传递给函数
2、执行某些一次性的代码
function m(mySum, q, w) {
return mySum(q, w);
}
var ret = m(function(a, b){
return a + b;
}, 1, 2);
console.log(ret);
9.即时函数
即时函数(自执行函数):当函数声明之后立即执行。
格式:
(匿名函数)(给第一个小括号中的匿名函数传递的参数);
<strong>注意:</strong>第二个小括号表明函数立即执行,并且给函数传参。
案例:
(function(str){
console.log(str);
})("sunck is a good man");
10.总结
啊!啊!啊....累死我了,要疯了,不过还好,谢谢打赏!!!!