• js函数的各种写法与调用


    以下是我见过的各种js函数的各种写法以及调用,虽然有些写法及其调用我不清楚其专业术语叫啥,但并不影响我写一个总结笔记。

    我们刚开始接触js语音,经常看到的这种名叫“使用function关键字来定义函数”的写法,如:

    function f(e){
    alert(e);
    }
    f("hello world");

    把函数赋值给一个变量,这种大概叫“表达式方式定义函数”吧,如:

    var f=function(e){
    alert(e);
    }
    f("hello world");

    如上,如果省略了函数名,这种也叫“匿名函数”,当然也可以不匿名,给一个函数名,这在用于递归函数时就用到了,如:

    var fact=function factTemp(n){
    if(n<=1) return 1;
    else return n*factTemp(n-1);
    }
    fact(3); // return 6

    还有一种叫“使用构造函数”来定义函数,如:

    var f=new Function("x","y","alert(x*y);");
    f(2,3); //==>6

    以上是三种定义函数的写法及其调用,但是调用还有其他方式:

    用call()函数间接调用,如:

    function person(name){
        this.name=name;
        this.sayHi=function(age,blogs){
            alert("My name is: "+this.name+";\n age:"+age+";\n blogs:"+blogs);    
        }
    }
    function me(name){
        this.name=name;    
    }
    var person1=new person("function person");
    var me1=new me("function me");
    person1.sayHi.call(me1,24,"http://www.cnblogs.com/xiaomou2014");  //本来me1是没有sayHi函数的,经过用call就调用了personal里的sayHi函数了。

    同样类似于call的同类函数apply也同样能实现这样子的功能,只不过他的第二个参数是数组而已,如:

    function person(name){
        this.name=name;
        this.sayHi=function(age,blogs){
            alert("My name is: "+this.name+";\n age:"+age+";\n blogs:"+blogs);    
        }
    }
    function me(name){
        this.name=name;    
    }
    var person1=new person("function person");
    var me1=new me("function me");
    person1.sayHi.apply(me1,[24,"http://www.cnblogs.com/xiaomou2014"]);  

    函数可以赋值给变量,同时也可以把他直接赋值给对象的属性,如:

    var o={ square:function(x){ return x*x; } };

    var y=o.square(2);  //y=4;

    有时候我们定于了一个函数后需要他马上运行,这貌似也挺多见于js插件,如:

    (function(){
    alert("hello world");
    })();

    也可以给他一个函数名:

    (function f(){
    alert("hello world");
    })();

    第二种:

    (function(){
    alert("hello world");
    }());

    同样的我们也可以给他一个函数名:

    (function f(){
    alert("hello world");
    }());

    当然也可以给它一个参数:

    (function(e){
    alert(e);
    }("hello world"));

    看别人的插件,你会发现人家开头处加了一个";",这样就算页面js有错误,加载运行他的插件也能保证运行,如:

    ;(function(e){
    alert(e);
    }("hello world"));

    如果一个函数的参数很多,那么我们调用函数的时候并不能很好的记住他的顺序,把参数封装成对象,然后把对象里的一个个属性对应用于参数,这样子很好解决了这个问题,如:

     1 var f=function(args){
     2     sayHi(args.country || "Chinese",
     3             args.name,
     4             args.qq,
     5             args.phone,
     6             args.email)                
     7 }
     8 function sayHi(country,name,qq,phone,email){
     9     alert("Hi, I am a "+country+", my name is "+name+";qq:"+qq+";phone:"+phone+";email:"+email);    
    10 }
    11 f({name:"xiao",phone:"13888888888",email:"123456@qq.com",qq:123456});

    这样子只要把参数名记住了就可以了,不用管他的顺序,同时给需要赋默认值得参数也很方便,如 args.country || "Chinese",如果调用函数的时候没有给country 这一参数实参,那么他的默认值就是chinese了。

  • 相关阅读:
    数据库知识扩展
    数据库遇到的问题——mysql在线修改表结构大数据表的风险与解决办法归纳
    数据库遇到的问题——事务操作时中断导致锁表
    java中常见的内存泄露的例子
    数据库设计中常见表结构分析
    索引失效的7种情况
    DWZ 自定义异常及后台校验2-a链接弹出框
    DWZ 自定义异常及后台校验
    Excl中的数据转换成SQL脚本(含日期写法)
    SpringAop (二)
  • 原文地址:https://www.cnblogs.com/xiaomou2014/p/3900403.html
Copyright © 2020-2023  润新知