函数声明以及函数表达式区别

1、函数声明

在主代码流中声明为单独的语句的函数
直接在所在的作用域内声明即可,在相同的作用域内,任何地方都可以调用

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

2、函数表达式

在一个表达式或者另一个语法结构中创建的函数

  let sum1 = function (a, b) {
      return a + b
    }

3、函数表达式与声明函数的区别

(1)javascript引擎会在什么时候创建函数

函数表达式:

是在执行到该行代码的时候,对应的函数才会被创建,不能提前调用。
下面的这个例子,sayHi只能放到函数表达式后面执行。

    let sayHi = function (name) {
      alert(`Hello, ${name}`)
    }
    sayHi("Year")
函数声明

一个全局函数声明对整个脚本来说都是可见的 无论它被写在脚本的那个位置。由于javascript内部算法的缘故,首先会在脚本中寻找全局函数声明并创建这些函数,我们可以将其视为初始化阶段,在处理万所有函数声明后,代码才被执行 所以运行时,可以在声明之前就使用这些函数。
下面的这个例子,非严格模式下,sayHello可以放到任意位置执行。

    sayHello("Year");

    function sayHello(name) {
      alert(`hello, ${name}`)
    }

(2)函数声明另外的一个特殊的功能是它们的块级作用域
严格模式下,块级作用域内声明的函数只能在块级作用域下使用,全局作用域内不能访问

 "use strict"
 let age = prompt("what is your age?", 18);

    if (age < 18) {
      function welcome() {
        alert("Hello !");
      }
    } else {
      function welcome() {
        alert('Hi !');
      }

      welcome()
    }

    welcome() // 全局作用域下使用 报错

此时如果需要调用welcome函数就需要使用函数表达式

 let yearAge1 = prompt("what is your age, Fish", 18);
    let welcome;
    if(yearAge> 18) {
      welcome= function () {
        alert("Hello")
      }
    }else {
      welcome= function() {
        alert("Hi, year")
      }
    }

    welcome()

4、什么时候选择函数声明与函数表达式

(1)如果我们需要全局声明一个函数时,首先可以考虑函数声明语法, 它能够为组织代码提供更多的灵活性,因为我们可以在函数声明前调用这些函数
(2)仅当函数声明不适合对应的任务时,可以使用函数表达式

相关

引用参考:https://zh.javascript.info/arrow-functions-basics

你可能感兴趣的:(函数声明以及函数表达式区别)