JavaScript思考之二:函数的基本概念

来源:互联网 发布:大班美工区域活动教案 编辑:程序博客网 时间:2024/06/02 01:27

接上文。

3. 函数的参数

3.1 形参与实参

函数就是方法,是一段可执行代码的集合。原则上,函数最好是死板的,只做一件事,并且同一个函数每次做的事情都一样。试着比较下面两个函数。

函数1:

function PrintOneToNine(){

for(var i=1;i<=9;i++){

 console.log(i)

}

}

PrintOneToNine();


函数2:

function PrintThisToThat(x,y){

x<y?"":[x,y]=[y,x];

for(var i=x; i<=y; i++){

console.log(i);

}

}

PrintThisToThat(9,1);

你会发现这两个函数都打印了1到9共9个数字,结果是相同的。但函数2更具有可塑性。函数2之所以比函数1强大,是因为我们利用了参数。x和y就是函数2的参数。

函数之所以需要参数,是因为一个函数是经常需要和外部进行通讯的,根据实际需要来处理相同的事情。我们可以把函数想象成是一个面包机,主要任务是提供标准化的烘焙过程,所以不同的点心进去就会出来不同的面包,而不是每次都出来一样的面包。

上面的PrintThisToThat函数定义了2个参数,称之为2个形参。如果只给1个参数(实参),即执行PrintThisToThat(9)会怎么样?undefined.


3.2 参数缺省

可以看出,PrintThisToThat(9)是无法正常执行的。我们可以假设,用户输入PrintThisToThat(9)是想打印0到9这几个数字,那么我们怎么修改这个函数才能做到一样的功能?

function PrintThisToThat(x,y=0){

x<y?"":[x,y]=[y,x];

for(var i=x; i<=y; i++){

console.log(i);

}

}

PrintThisToThat(9);

运行上面这段代码,发现函数可以正常执行。区别在于我们在函数的定义时,同时对参数y进行了初始化赋值。那样,当调用时未提供y参数,则启用初始化的赋值。


3.3 参数在哪儿

还是上面的函数。如果执行PrintThisToThat("A","B")会怎么样呢?

很明显,传入的参数与我们的本意不符。原本我们只想打印两个数之间的数字,现在传过来了两个字母,当然不会处理了。为了提高函数的严谨性,有必要对参数进行验证,验证涉及到参数的类型,值,以及数量。在验证之前,我们需要知道参数在哪儿。

参数在函数体内部的arguments数组中。

function PrintThisToThat(x,y=0){

console.dir(arguments);

x<y?"":[x,y]=[y,x];

for(var i=x; i<=y; i++){

console.log(i);

}

}

PrintThisToThat(6);

PrintThisToThat(6,2);

arguments是一个数组,那么我们就可以利用数组的方法对参数进行校验。





原创粉丝点击