js函数和对象

发布时间 2023-05-24 00:49:33作者: 万金流
《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)]。