JavaScript基础语法-函数

 1.什么是函数?

​ 函数是一个可以重复使用的程序模块,该程序模块可以完成一个特定的功能

​ 2.函数的定义

​ function 函数名(【参数】]){

​ 函数体语句

​ }

​ (1)function:是关键字,必须小写

​ (2)函数名:用户标识符(用户自定义)—- 建议:见名知意

​ (3)【参数】:’()’不能省略,’参数’是可选的(函数可以有参数,也可以没有参数)

​ (4)’{}’:不能省略,表示函数的控制范围

​ (5)’函数体语句’:实现功能的代码

3.函数的调用

​ (1)带返回值的函数(函数体中有return语句的函数):

​ let / var 变量 = 函数名(【参数】)

注意:关于函数的返回值

​ a.函数是否要返回值由具体的需求决定

​ b.函数返回值通过return语句来完成。在函数中一旦执行了return语句,当前函数就结束运行

(2)无返回值的函数调用:

​ 函数名(【参数】)

4.函数的参数

函数在运行时需要外部的数据才是实现具体的功能。这个外部的数据就是参数

1)形参:形式参数,是在函数定义时出现在函数首部的参数。形参没有实际值,只是一个占位符

​2)实参:实在参数。是函数调用时出现在函数首部的参数,实参表示的是一个实际值

练习:定义一个函数,用来判断一个数是否是素数,若是素数返回true,若不是返回false

//定义函数:判断一个数是否是素数
        function isPrime(n){  //n是形参
            // let flag = true  //假设n是素数
            for(let i=2;i

3)在函数调用时,参数的传递方向是实参—->形参(传递方向是单向的,当形参发生改变后不会影响实参)

//参数传递方向是单向的:实参--->形参
        function swap(x,y){//两个形参,参数之间用逗号分隔
            console.log('形参:x='+x+',y='+y)
            let temp = x
                x = y
                y = temp
            console.log('形参:x='+x+',y='+y)
        }
        let a = 5,b = 6
        console.log('实参:a='+a+',b='+b)
        swap(a,b)
        console.log('实参:a='+a+',b='+b)

函数参数的数量:在javascript中允许函数的形参与实参不同

1)实参的数量多于形参的数量:函数可以正常运行,多余的实参被忽略

2)实参的数量少于形参的数量:多出的形参是一个已声明未赋值的变量,它的值是undefined

5. arguments对象的使用

内置对象:已经定好的,用户只要使用即可

封装实参的对象: arguments。调用函数时,函数的实参都保存在arguments对象中

arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度,在调用函数时,我们所传递的实参都会在arguments中保存,比如:arguments.length 可以用来获取实参的长度,我们即使不定义形参,也可以通过arguments来使用实参,例如:

arguments[0]:表示第一个实参
arguments[1]:表示第二个实参

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

function fun(a, b) {
    // 通过下标获取第一个参数
    console.log(arguments[0]);
    // 通过下标获取第二个参数
    console.log(arguments[1]);
    // 获取实参的个数
    console.log(arguments.length);
    // 看看它的函数对象
    console.log(arguments.callee);
    console.log(arguments.callee == fun);
}
fun("Hello", "World");

练习:定义一个函数,返回调用该函数时实参的最大值

function getMax(){
            let max = arguments[0] //假设第一个实参是最大的
            for(let i=1;i

强调:每个函数内部都有一个arguments对象,本质是一个数组,保存的是调用函数时传递的实参

6.函数的递归调用(重点、难点)

(1)递归调用:函数自己调用自己(即在函数的函数体语句中调用自己)

​(2)递归算法:

​ 1)用递归方式解决问题的前提

​ a.问题可以进行分解,分解得到的新问题的解法与原问题的解法相同

​ 8! —> 8 7! —->7 6!—>…….2!—>2 1!

​ b.问题的分解过程必须有明确的结束条件

​ 2)递归的过程

​ a.自上而下分解问题:得到最简单的问题的解

​ b.自下而上回溯得到原问题的解

练习:用递归函数计算 n!

 function fun(n){
            //1.明确递归结束的条件
            if(n==1){
                return 1
            }else{
                //2.继续分解n
                return n * fun(n-1) //函数自己调用自己:在调用过程分解问题
            }
        }
        let m = fun(5)
        console.log('5!=',m)

你可能感兴趣的:(javascript,开发语言,ecmascript)