入门 - 函数

  • 作者:KK

  • 发表日期:2016.2.8


绝大部分编程语言都有函数这个东西,其实前面我们也接触过,由于当时还不适合跟你讲这个知识点,所以当时我称为命令,就是alert,typeof这些东西,它们是函数来的哦

函数的用法就是函数名(参数),比如alert(123111)这样弹出提示123111这串数字,使用函数时,要在函数名后面加一对括号,括号里再写参数,告诉函数具体怎么工作

就比如alert函数是用来弹出提示框的,但是要提示什么东西呀?所以就要在的括号里传入参数,告诉它具体要提示什么了


无参数函数

但是有些函数是不需要参数的,在这种时候就只要写函数名()就得了,留个空括号.

所以如果alert函数不需要参数的话,那写法就是alert(),但实际上alert函数是需要参数的哦!不需要参数的函数有prompt函数,比如下面的代码:

prompt();

就会弹出一个输入框要用户输入内容,只是输入内容后就什么事都没有了,具体这个prompt函数过一会就跟你讲


自定义函数

我们可以自己创作一些函数,这就是自定义函数,定义函数的写法如下:

function aaa(){

}

开头的function这个词是必须要这样写的,然后加一个空格,再写函数名,所以我上面自定义的函数名叫aaa,然后是一对括号,再一对花括号,这是一个空函数(回到开始阶段的术语就是"空命令"),什么事都不会做

而函数名的命名规则也是和变量一样,用英文或下划线开头,后面接着写英数字和下划线,其它不行,比如减号,逗号那些都不能出现在函数名里,其实这个命名规则和变量的命名规则是一样的


函数体

要让一个函数(命令)做点什么事情,比如像alert函数那样会弹出网页提示框,我们就要在花括号里面编写函数体,函数体是由一个个代码语句构成的(你可以在里面书写你学过的任何语句),比如这样:

function aaa(){
	//花括号这里面包住的就是函数体,有3句代码
	var a = 1 + '1';
	var b = '1加1居然是' + a;
	alert(b);
}

但是如果你把这些代码复制去运行,是不会有任何效果的,为什么呢?原因就是因为这只是定义函数,不是运行函数(命令),所以你需要加上运行命令才可以哦!比如这样:

//开始定义aaa函数
function aaa(){
	//花括号这里面包住的就是函数体,有3句代码
	var a = 1 + '1';
	var b = '1加1居然是' + a;
	alert(b);
}

aaa(); //定义完aaa函数后就可以调用aaa函数,就是调用aaa命令!算了后面我都叫函数啦,不叫命令啦

于是这样就会提示1加1居然是11这句话了,其中上面aaa()这句代码是为了调用函数,但你可以不调用,这样就只是在内存里产生了一个函数,但不会有任何可以看到的效果发生.所以我就加了句aaa()的代码来调用函数,让函数里面的代码跑起来就有效果发生了~


定义函数参数

上面我们测试的函数aaa是一个无参数的函数,就像prompt()一样只要写aaa()就可以调用,这小节我们学习函数参数的知识点

函数参数是为了告诉函数具体按照什么内容去工作,参数的定义就在花括号里定义,比如:

function aaa(param){

}

上面我在括号里增加了param这个词,这个词其实是可以自己随便写的,叫什么都行,就像变量名称一样(起名字的规则也跟函数名一样)

实际上当函数有了参数之后,这个参数就相当于函数体里面的一个变量,可以像使用变量一样用它,例子:

function aaa(param){
	var a = 111;
	alert(a); //提示变量a的值,结果是111

	alert(param); //提示参数param的值,具体看外面传什么进来
}

aaa(799);

上面调用aaa函数时传了个数字799进去,这个799会变成定义aaa时候里面的param

而且这个参数真的可以当变量一样用,可以拿去alert,也可以拿去做运算,下面我们定义一个函数,它的作用就是提示我们传进去的分钟数有多少秒:

function showMinutesSeconds(minutes){
	var seconds = minutes * 60;
	var tips = minutes + '分钟一共是' + seconds + '秒';
	alert(tips);
}

showMinutesSeconds(2); //结果提示120秒,因为2 * 60嘛

上面就是拿参数minutes和60做了乘法计算,然后将计算结果设置到seconds变量中,再alert提示

其中这里函数名是showMinutesSeconds,反正函数名都是自己写的,你叫aaa也行,叫其它也行,只要别跟JS自带的单词var,alertprompt这些撞名就行

  • 形参与实参

    关于参数你要搞清楚了,先看上面的showMinutesSeconds函数,它定义了一个叫做minutes并在函数体里面用于计算秒数,而外面执行showMinutesSeconds(60)的时候,传进去的数字60就变成了那个参数minutes,那么这个minutes就是形参(形式参数),而60就是实参

    形参就是定义形式的时候的参数,而实参就是实际上传进去的参数,搞清楚这个很重要

    比如

    var abc = 60;
    showMinutesSeconds(abc);
    

    这里形式参数始终还是minutes,而实际参数却是实际传进去的变量abc而不是60

    形式上定义时参数叫做minutes,实际上的参数就是实际调用时传进去的东西;而当实际参数与形式参数名字相同时,它们依然也是两回事,概念不会发生改变:

    var minutes = 50;
    showMinutesSeconds(minutes);
    

    这里外面调用时定义的变量minutes是实际参数,而定义showMinutesSeconds函数那块代码里的参数minutes则是形式参数,只是外面实际参数起的名字跟形式参数相同名字而已


  • 定义多个参数

    函数是可以定义接收多个参数的,例如:

    function xxx(a, b){
    	var c = a + b;
    	alert(c);
    }
    
    xxx(22, 33);
    

    上面的xxx函数定义了a和b两个参数,并将计算结果弹框提示出来.可以看出定义多个参数就是在定义时的括号里描述参数的时候,用逗号隔开参数就可以,逗号后面的空格可以不写,但是提倡你加空格让代码洁净一些

    那么要定义更多参数自然就是function xxx(参数1, 参数2, 参数3...)这样了


函数返回值

函数就相当于一个命令,让计算机执行一个命令后,这个命令执行得怎样,结果怎样,这里就需要用返回值这种东西来体现了

例如下面这个函数用于返回两个数相加的结果:

function add(a, b){
	var c = a + b;
	return c;
}

var r = add(67, 98);
alert(r);

上面alert提示的r变量值就是165,因为由add函数将67和98相加并返回给了r变量

其中实现返回功能就要用return这个关键字,比如return 99;这样就会返回99这个数字,也可以return一个变量

也有人叫它做return语句


函数传参方式

接着上面小节的那个add函数,其实你也可以这样来用的:

alert(add(67, 98));

之前是先声明r变量,再将r变量传给alert函数进行提示,这下直接将add函数的调用代码套了进alert函数的参数里,就不需要r变量了

函数需要的参数是一个,只要能得到这个值,下面几种写法都可以实现传值给参数:

alert(666); //直接传一个值

var a = 667;
alert(a); //传变量,因为这个变量的值是667

alert(add(444, 227)); //传add函数的计算结果都可以,因为add函数会返回一个计算结果

alert(666 + 2 * 3); //传计算表达式都可以,因为计算公式计算出来就是一个值,这个值就是672

alert(add(11, 23) + 100 / 50); //这也算是传递计算表达式,因为add函数返回了一个值参与了后面的加法运算

以后你可能还会遇到更多写法,但你只要理解函数参数需要的就是一个值就行了


互相调用

函数是可以互相调用的,例子:

function aa(){
	var x = 99;
	bb(x); //在aa函数里调用bb函数,并将函数里面的变量x作为参数传进去,就是bb函数里面的age参数
}

function bb(age){
	alert((age + 1) + '岁');
}

aa(); //调用aa函数

只要有函数,就可以在写代码的任何地方调用这个函数,又叫做执行这个函数/命令都可以


函数也是一种变量类型,定义一个函数aaa后,执行alert(typeof(aaa))就会提示function,函数的变量类型英文名称是function

包括我们常用的alert函数也可以被测出来:alert(typeof(alert))


调用函数

前面已经有不少演示代码调用函数了,但这里明确说一下,要调用一个函数就要在函数名后面加一对括号

比如alert()这样,如果你不加括号这只写alert,这样是不会调用函数的,不会发生任何事情

加括号是表示要运行这个函数里面的代码指令,如果不加,只是将内存地址跳到这个函数的地方,再取出这个函数而已

来看例子:

function abc(){
	return 999;
}

alert(abc()); //提示999,计算机会先执行abc函数,abc函数里面return了999,所以最终变成了alert(999)
alert(abc); //这样不会执行abc,反而是显示整个函数的代码出来,因为函数也是一种变量,变量类型叫function而已嘛,所以既然是变量,当然可以拿来alert看看这个变量的值咯