先记点简单的,再慢慢补充

函数声明

一个被函数声明创建的函数是一个Function对象,它具有Function对象的所有属性、方法和行为。

  1. 有原型的属性和方法,还有部分继承Object对象,可查看Function对象的详细信息

image.pngimage.png

  1. xx
  2. 函数声明提升

可以在函数声明前使用函数

  1. console.log('执行:',testFunction(6,7))
  2. function testFunction(param1, param2) {
  3. return param1 + param2;
  4. }

函数表达式

  1. 函数表达式没有提升,不可提前使用 ```javascript test1() //Uncaught ReferenceError: Cannot access ‘test1’ before initialization const test1 = function (){ return ‘test1’ }
  1. 2. **name**函数名称
  2. ```javascript
  3. let function_expression = function [name]([param1[, param2[, ..., paramN]]]) {
  4. statements
  5. };
  1. 可省略。省略后就是匿名函数

    1. const test1 = function (){
    2. return 'test1'
    3. }
    4. console.log(test1.name) // ‘test1’
    5. const test11 = test1
    6. console.log(test11.name) // ‘test1’
  2. 不省略

    1. const test2 = function test(){
    2. return 1
    3. }
    4. console.log(test2.name) test
    5. test() //ReferenceError: test is not defined

    直接调用名字,报错,没有一点b用。

被函数表达式赋值的变量 会有一个name属性。
如果把这个变量赋值给另一个变量,它的name属性值不会改变。
如果函数是匿名函数,它的name属性值是被赋值变量的名称(隐藏值)。
如果函数不是匿名函数,那么属性值就是这个函数的名称(显性值)。
(就像箭头函数,箭头函数没有名字要给赋予name属性一个隐性名)