• Javascript函数(定义、传值、重载)


    Javascript 函数的定义的方式有不止一种。

    第一种方式:

    function fn1(){

    alert(typeof fn1);

    alert(“fn1”);

    }

    在调用的时候直接就可以fu1();

    函数运行的结果就是两个alert:function   fn1.

    有必要说明的是,function是一个对象(在后面对对象的说明中也会具体细说),新定义的函数就是function这个类的一个实例。但是function和object的区别就在于在定义两个函数实例fn1和fn2的过程中,实现了对function的的拷贝。函数虽然是一个对象,区别在于:对象通过引用的只想完成对象的赋值,函数是通过对对象的拷贝完成。

    这里举例说明:

    function fn1(){

    alert(“fn1”)

    }

    var fn2=fn1;

    fn2();

    fn1();

    fn1=function(){

    alert(“fnn1”)

    }

    fn2();

    fn1();

    这里输出的就是fn1 fn1 fn1 fnn1,说明的是:在对fn1重新定义之后,内存又给fn1开辟了一块新的空间,fn2并没有受到干扰。这是函数和对象的区别。

    对比试验:对象的定义

    var o1=new Object;

    var o2=o1;

    o2.name="lele";

    alert(o1.name);

    这里输出的是lele,意思就是说我们对o2的属性改变之后,o1对应的参数跟随变化。对于对象而言,是通过引用来完成赋值,牵一发而动全身。

    既然函数就是一个类,那么可以用构造函数的方式构建函数如下:

    第二种定义方式(构造函数的方法):

    var fun =new Function("num1","num2","alert(num1+num2)");

    fun(2,3);

    这里输出5.

    下面说一下函数的传值:

    function callfun(reg,arg){

             return reg(arg)

    }

    function fun(str){

             alert("Hello "+str)

    }

    callfun(fun,"world!")

    用到的是函数之间的值传递。函数既然是一个类,那么这里就可以把函数通过参数来传递。这是很令人震惊的!第一个函数callfun第一个参数就是一个函数名,特用来触发第二个函数fun,第二个函数通过alert将拼接好的字符串显示出来。最后的结果就是Hello world!

    下面说一下函数的重载,就是针对不同参数的函数,达到理想的结果:

    function fn1(num1,num2){

    alert(num1+num2)

    }

    function fn1(num1){

             alert(num1)

    }

    fn1(3,2);

    fn1(3);

    很遗憾这里返回的都是3,也就是说,函数重载并没有起作用。所以javascript是不存在函数的重载现象的。

    值得注意的是如果是

    function fn1(num1){

             alert(num1)

    }

    function fn1(num1,num2){

    alert(num1+num2)

    }

    fn1(3,2);

    fn1(3);

    这里返回5和NaN。所以,对于javascript函数来说,参数只能多,不能少。

  • 相关阅读:
    第三章例3-3
    第三章例3-2
    第二章例2-11
    第二章例2-10
    第二章例2-9
    204
    205
    202
    203
    201
  • 原文地址:https://www.cnblogs.com/lamian/p/3932557.html
Copyright © 2020-2023  润新知