• JS-几类函数


    JS-几类函数

    命名函数、匿名函数、自调用函数、回调函数;函数声明、函数表达式

    函数声明

    function foo() {}//函数声明:function functionName (){  } 对于函数声明,函数的名称是必须的
    

    解析器在向执行环境中加载数据时,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问)。

    alert(sum(1,1));
    function sum (a,b){
      return a + b;
    }
    

    以上代码可以正常执行。因为在代码执行之前,解析器就已经通过一个名为函数声明提升的过程,读取并将函数声明添加到执行环境中 。在对代 码求值时,Javascript引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码放到了调用它的代码的后面,Javascript 引擎也能把函数声明提升到顶部。

    函数表达式

    var fuc = foo(){}//函数表达式:function functionName[可选](){  }对于函数表达式,函数的名称是是可选的
    

    解析器在向执行环境中加载数据时,必须要等到解析器执行到它所在的代码行,才会真正被解释执行。
    如果像下面例子所示,把上面的函数声明改为函数表达式,就会在执行期间导致错误。

    alert(sum(1,1));	//出错
    var sum = function sum (a,b){
      return a + b;
    }
    

    注意:如果没有函数名的话,一定就是函数表达式 !!!

    命名函数

    函数如果有名字,就是命名函数

    function f1(){
        console.log("这个函数就是命名函数");
    }
    

    匿名函数

    函数如果没有名字,就是匿名函数

    function (){
        console.log("这个函数就是匿名函数");
    }
    

    注意:匿名函数不能直接调用

    自调用函数

    自己调用自己
    注意:这样函数不会冲突

    (function(){console.log("这是函数的自调用");})();//这个函数就是函数自调用
    //解释:
    var f1 = function(){
        console.log("你好!");
    };
    f1();
    //解释:f1里面存储的就是函数代码,通过f1加()的方式调用,没有f1变量的时候,直接在代码后面加上()就可以调用,叫函数的自调用
    

    回调函数

    函数作为参数调用

    //函数声明,fn是变量,fn是参数
    function f1(fn){
        fn();//函数调用----说明fn这个变量中存储的是一个函数
    }
    function f2(){
        console.log("函数可以作为参数使用");
    }
    f1(f2);//调用f1,将f2作为参数传进去
    //结果:函数可以作为参数使用
    

    几个需要注意的问题:

    ★.函数名里面存储的就是函数代码

    function f1(){
        console.log("这是一个函数");
    }
    console.log(f1);//打印出来的结果就是上面的函数代码
    f1();//这是函数的调用
    

    ★.函数表达式:把匿名函数赋给一个变量

    var f2 = function(){
        console.log("把匿名函数赋给一个变量");
    };
    f2();//f2中存储的就是函数代码,用变量名加()就是函数调用
    注意:函数表达式后面赋值结束后要加分号
    

    ★.函数的覆盖问题:如果函数名重复,下面的函数会自动覆盖上面的函数代码

    function f1(){
        console.log("这是函数一");
    }
    function f1(){
        console.log("这是函数二");
    }
    f1();//此时打印的结果是:这是函数二
    
    
    注意:
    var f1 = function(){
        console.log("这是函数表达式1");
    };
    f1();//结果是:这是函数表达式1
    
    f1 = function(){
        console.log("这是函数表达式2");
    };
    f1();//结果是:这是函数表达式2
    f1();//结果是:这是函数表达式2
    
    解释:因为这是函数表达式,所以第一次调用的时候是f1调用上面的代码,接下来又给变量f1重新赋值后,f1里面存储的就是后面的赋值结构果了
    

    ★.函数可以作为返回值

    function f1(){
        return function(){
            console.log("这是被返回的函数");
        };
    }
    var f = f1();//f1函数的调用,此时f就是函数l
    f();//调用函数,结果为:这是被返回的函数
    

    参考网址:

    1. Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式

    2. JS中的命名函数,匿名函数,自调用函数和回调函数

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/ShineaSYR/p/9336133.html
Copyright © 2020-2023  润新知