美文网首页
函数的声明和调用

函数的声明和调用

作者: 倾国倾城的小饼干 | 来源:发表于2018-04-02 16:28 被阅读0次

    函数的概念

    js函数是指一个特定的代码块,可能包含多条语句,可以通过名字来供其他语句调用以执行函数包含的代码语句。
    比如我们有一个特定的功能需要三条语句实现:
    statement1;
    statement2;
    statement3;
    那么,每次想实现呢这个功能的时候就需要写这三句话很麻烦,我们可以把这三条语句打包为一个函数:

    function dosth{
      statement1;  
      statement2;  
      statement3;  
    }
    

    这样每次想实现功能的时候,我们就调用一下函数就可以了,调用函数通过函数名称()的形式调用。
    函数的命名用驼峰 动词/动宾的形式。

    函数的声明

    • 构造函数
      函数也是对象的一种,我们可以通过其构造函数使用new来创建一个函数对象。
    var sayHello=new Function("console.log('hello world');");
    
    • 函数声明
      函数声明的函数名称是可选的,比如可以有匿名函数。函数声明可以提前引用该函数。函数表达式表示的函数在末尾要加分号,就像声明其他变量一样。
      一个函数名只是一个指针,就像其他对象一样。
    function fn1(num1,num2){
        return num1+num2
    }
    fn1(10,20)
    var fn2=fn1;
    fn2(10,20)//30
    fn1=null;
    fn2(10,20)//null
    
    function wscat(type){
       return type="wscat";
    }
    
    • 函数表达式
    var oaoafly =function (type){
      return type="oaoafly";
    }
    

    区别

    1. 函数声明不管在哪里定义,该函数都可以进行调用。而函数表达式的值必须是在函数表达式赋值完成后,该函数才能调用。
    2. 对于函数声明,js解析器会优先读取,确保在所有 代码执行前声明已经被解析。而函数表达式,如同其他基本类型的变量一样,只在执行到某一句的时候也会对其进行解析。

    函数的调用

    作为函数进行调用

    function fn1(){}
    fn1()//作为函数进行调用
    

    作为方法进行调用
    在将函数作为对象的方法进行调用的时候,该对象就变成了函数的上下文,在方法内部可以使用this进行访问。

    var obj={
        creep: function(){
            return this;
        }
    }
    if(obj.creep()==obj){
        console.log(true);
    }//证明函数里面的this指的是对象obj
    

    作为构造器进行调用
    构造器的调用是作为方法进行调用的普适方法

    function Fn1(){
        this.creep=function(){
            return this;
        }//此处的this指的是新创建的实例ninj,为的就是可以使得函数fn1通用。
    }
    var ninj=new Fn1()
    

    在使用关键字new进行调用的时候,先创建了一个空的对象实例,并且作为参数this传递给该函数。又在空对象上创建了creep属性,并且把一个函数赋值给这个属性。
    注意:函数和方法的命名通常是用动词,小写字母。但是构造器是用名词进行命名,以大写字母开头。
    如果没有new关键字的话,this就是指向全局作用域window。因为Fn1的调用是window.Fn1。
    ++使用apply()和call()进行调用++
    用法显式的由编码者自己决定任何一个对象作为函数的上下文。比如在事件绑定中让函数的拥有者是函数上下文而不是绑定的事件。
    apply传入两个参数,一个是函数的上下文对象,一个是数组(也可以是arguments对象)
    call传入的是一个参数列表,参数列表的第一项是函数的上下文对象。
    计算数组项之和。

    function fn1(){
        var result=0;
        for(i=0;i<arguments.length;i++){
            result+=arguments[i];
        }
        console.log(result)
    }
    var anki1={};
    var anki2={};
    fn1.apply(anki1,[21,31,22])
    fn2.call(anki2,21,31,22)
    

    对于apply第二个参数可以是数组也可以是arguments对象。
    例如:

    function fn1(num1,num2){
        return num1+num2
    }
    fn1.apply(this,[1,2])//此处的this指的是window.
    function fn2(num1,num2){
        return num1+num2;
    }
    function sum(num1,num2){
        return fn2.apply(this,arguments)//this在不明确指的情况下指的是window。此处的arguments指的是fn2的arguments.
    }
    sum(10,20)
    

    匿名函数

    匿名函数的应用场景
    通常是用在一个对象的方法里或者用在回调函数里(比如定时器或者事件处理程序等)

    var obj={
        creep:function(){}
    }//应用在对象的方法里
    setTimeout(function(){},200)//应用在定时器上
    

    相关文章

      网友评论

          本文标题:函数的声明和调用

          本文链接:https://www.haomeiwen.com/subject/hldxhftx.html