什么是函数
把一段相对独立的具有特定功能的代码块封装起来,形成一个独立实体,就是函数,起个名字(函数名),在后续开发中可以反复调用
函数的作用:代码的重用
函数的定义
1.函数声明
function 函数名(){
函数体;
}
函数声明的时候,函数体并不会执行,只要当函数被调用的时候才会执行。
函数的调用
函数名();
函数体只有在调用的时候才会执行,可以多次调用。
function sayHi() {
console.log("世界上另一个我?");
}
// 调用函数
sayHi();
函数的参数
1.在函数定义的时候,函数名字后面小括号里面的变量就是参数,目的是函数在调用的时候,对用户传进来的值进行操作
2.形参:函数在定义的时候,小括号里面的变量就是形参
2.实参:函数在调用的时候,小括号里面传入的值就是实参,实参可以是变量也可以是值
function 函数名(形参1, 形参2, 形参...){
函数体
}
带参数的函数调用:函数名(实参1, 实参2, 实参3);
注意事项
1.函数需要先定义,才能使用
2.函数名的命名要遵从驼峰命名法
3.函数一旦重名,会把前面的函数覆盖掉
3.Ctrl+鼠标左键---->转到定义处
函数的返回值及函数表达式
当函数执行完的时候,并不是所有时候都要把结果打印。我们期望函数给我一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。函数通过return返回一个返回值
语法:
1.声明一个带返回值的函数
function 函数名(形参1, 形参2, 形参...){
//函数体
return 返回值;
}
2.可以通过变量来接收这个返回值
var 变量 = 函数名(实参1, 实参2, 实参3);
注意:
1.如果一个函数中有return,那么这个函数就有返回值
2.如果一个函数中没有return,那么这个函数就没有返回值
3.如果一个函数中没有明确的返回值或者没有返回值,那么调用的时候接收了,结果就是undefined
(没有明确的返回值:函数中没有return;函数中有return,但是return中没有任何内容)
4.变量声明了,没有赋值,结果也是undefined
5.return后面的代码不会执行
function f1() {
console.log("光辉岁月");
return 100;
}
//f1函数调用,把函数的返回值输出了
console.log(f1());
function f1() {
console.log("光辉岁月");
return 100;
}
console.log(f1);//输出的f1函数名字-----是f1函数的代码
函数练习
/**
* 这中间是用来写注释的,用/**+回车即可出现
* @param array
* @returns
*/
1.求一组数字中的最小值
function getArrayMin(array) {
//假设这个变量里存储的是最小值
var min = array[0];
for (var i = 0; i < array.length; i++) {
if (min > array[i]) {
min = array[i];
}
}
return min;
}
//测试----调用函数并传入一个数组,把数组中的最小值直接显示出来
console.log(getArrayMin([10, 20, 30, 40, 1]));
2.通过函数实现数组反转
function reverseArray(arr) {
for (var i = 0; i < arr.length / 2; i++) {
var temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
return arr;
}
console.log(reverseArray([1, 2, 3, 4, 5]));
3.求一个数字的阶乘
function getJieCheng(num) {
var result = 1;
for (var i = 1; i <= num; i++) {
result *= i;
}
return result;
}
console.log(getJieCheng(5));//1*2*3*4*5
4.求一个数字的阶乘和 (函数内部可以调用其他的函数)
function getJieChengSum(num) {//5
var sum=0;//和
for(var i=1;i<=num;i++){
sum+=getJieCheng(i);
}
return sum;
}
console.log(getJieChengSum(5));
5.求斐波那契数列 12---144
//1 1 2 3 5 8 13 21 34 55 89 144
function getFib(num) {
var num1=1;
var num2=1;
var sum=0;
for(var i=3;i<=num;i++){
sum=num1+num2;
num1=num2;
num2=sum;
}
return sum;
}
console.log(getFib(12));
arguments的使用
JavaScript中,arguments对象是比较特殊的一个对象,实际上是当前函数的一个内置对象;也就是说所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有的实参;arguments是一个伪数组,因此可以进行遍历
function f1() {
//arguments----->数组使用------伪数组---
var sum=0;
for(var i=0;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
console.log(f1(10,20,30));
* 命名函数:函数如果有名字,就是命名函数
* 匿名函数:函数如果没有名字,就是匿名函数
1.函数的另一种定义方式:
* 函数表达式: 把一个匿名函数给一个变量,此时形成了函数表达式
* var 变量=匿名函数;
var f1=function (){
};
* 如果是函数表达式,那么此时前面的变量中存储的就是一个函数,而这个变量就相当于是一个函数,就可以直接加小括号调用了
* f1();
注意:
* 函数表达式后面,赋值结束后,要加分号
2.函数的自调用:没有名字,调用---声明的同时,直接调用
(function () {
console.log("嘎嘎")
})();
3.函数也是一种数据类型
function f1() {
console.log("我是函数");
}
console.log(typeof f1);
//函数是有数据类型,数据类型:是function 类型的
4.函数可以作为参数使用,如果把一个函数作为参数,那么我们说这个参数(函数)叫回调函数
function sayHi(fn) {
console.log("您好啊");
fn(); // fn此时应该是一个函数
}
function suSay() {
console.log("我很好!");
}
sayHi(suSay);
5.函数作为返回值使用
function f1() {
console.log("f1函数调用了");
return function () {
console.log("这是一个函数");
};
}
var ff=f1();//调用
//ff就是一个函数了
ff();