《Web前端开发实践》承P85
eval(Evaluate [ɪˈvæljueɪt])求值。
例:
用循环依次执行三个函数
1 function f1() 2 { 3 console.log("hi1"); 4 } 5 function f2() 6 { 7 console.log("hi2"); 8 } 9 function f3() 10 { 11 console.log("hi3"); 12 } 13 for(i=1;i<=3;i++) 14 { 15 eval("f"+i+"()"); 16 }
结果略。
js支持给参数设置默认值。
例:
function f1(x,y=50) { console.log(x+y); } f1(10,20); f1(10);
结果分别是30和60。
注意,有默认值的参数只能是参数表最后的几个参数。
js支持不确定个数参数。通过在参数前面加“...”,表示该参数可以接受多个值。
例,求一组数字的和:
function f1(...x) { s=0; for(i=0;i<x.length;i++) { s+=x[i]; } return s; } alert(f1(1,2,3,4,5));
弹出15。
js支持用arguments数组获得实际参数。这时候函数可以不带参数。
还是求一组数字的和:
function f1() { s=0; for(i=0;i<arguments.length;i++) { s+=arguments[i]; } return s; } alert(f1(1,2,3,4,5));
结果还是弹出15。
再提一下匿名函数的自调用。
对于只出现一次的函数(通常就是随手写个功能,用完就算了,起名字太麻烦;或者用于事件绑定等特殊情况),可以写成匿名函数。
如已知半径,随手输出一个球的体积:
(function (x) { console.log(4/3*3.14*x*x*x); })(2);
结果略。
如点击页面,弹出窗口:
function f1() { document.body.onclick=function () { alert("hi"); } }
结果略。
js中,函数可以作为其他函数的参数出现。作为参数的函数,叫“回调函数”。
//用逗号做分隔符打印数组x function f1(x) { t=""; for(i=0;i<x.length-1;i++) { t+=x[i]+","; } t+=x[x.length-1]; console.log(t); } //用减号做分隔符打印数组x function f2(x) { t=""; for(i=0;i<x.length-1;i++) { t+=x[i]+"-"; } t+=x[x.length-1]; console.log(t); } //用指定方法x打印数组 function f3(x) { let a=[1,3,5,2,4,6]; x(a); } f3(f1); f3(f2);
运行结果:

值类型和引用类型。对于数组这样的引用类型,和普通这样的值类型,在函数处理的时候,需要了解一下原理。
例:
function f1(x,y) { t=x; x=y; y=t; } function f2(x,y) { t=x[0]; x[0]=y[0]; y[0]=t; } a=1; b=2; c=[3]; d=[4]; f1(a,b); f2(c,d); console.log(a); console.log(b); console.log(c[0]); console.log(d[0]);
运行结果:

练习:
编写四个函数,分别求两个数的和差积商,并运用。
输入一个数n,返回1+2+3+...+n。
输入两个数m,n(m<n),返回m*(m+1)*...*n。
用数组做方法的参数和返回值。把一组整数反转,输出。
输入数组x和标准y,统计出x中大于y的数所占比例。
编写两个方法,分别输入和输出一维整形数组[形如read_array(5)和write_array(x)]。