函数声明

# 1.函数的定义

函数是将复用的代码块封装起来的模块,实现一个固定的功能或者是程序,在这个封装体中需要一个入口和一个出口,入口是参数,出口是返回。

# 2.函数声明

    // 1. function
    function functionName(arg0,arg1,...argN) {
    // 函数内执行的语句
    }

    // 函数表达式又叫字面量
    const functionName = function test() {  // test 只在函数内可见,可以不写test,如果不写称之为匿名函数
        var a = 1;
        console.log(a);
    }

    // 匿名函数
    const functionName = function() {
        var a = 1;
        ...
    }

    functionName(); // 函数执行

函数重复声明

    // 当函数重复声明后,后声明的函数覆盖前面的函数
    function f() {
        console.log(1);
    }
    f() // 函数执行  2

    function f() {
        console.log(2);
    }
    f() // 2

上面的结果有点奇怪?为什么第一个f()执行后也是2呢?接着看

# 2.函数提升

WARNING

函数声明可以提升,函数表达式不可以提升。函数提升优先级高于变量提升。(后面会专门章节记录函数提升和变量提升之间的关系)

    // 函数声明可以被提升
    f(); // 1
    function f() {
        console.log(1);
    }    

    // 函数表达式-字面量不可以被提升
    f();  // TypeError: f2  is not a function
    function f() {
        console.log(2);
    }

# 3.函数属性和方法

  1. name属性
    function f() {
        console.log(f.name);  // f
    }

    const f = function () {
        console.log(f.name); // f
    }   
    
    // name 属性的作用:获取 函数参数的名称
    var myFunc = function () {};
    
    function test(f) {
        console.log(f.name); // myFunc
    }
    test(myFunc);
    // 将一个函数做为一个参数传递给另一个函数,我们可以通过name属性拿到参数函数的函数名
  1. length属性
    // length:返回函数预期传入的参数个数,即函数定义之中的参数个数(形参)
    function f1(a, b) {}
    console.log(f1.length) // 2
  1. toString属性
    // toString:返回一个字符串,内容是函数的源码
    function f2() {
        a();
        b();
        c();
    }
    console.log(f2.toString());
    
    // function f2() {
    //     a();
    //     b();
    //     c();
    // }    
Last Updated: 12/7/2020, 3:08:32 PM