美文网首页
函数声明以及函数表达式区别

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

作者: Year_h | 来源:发表于2020-08-20 15:19 被阅读0次

    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

    相关文章

      网友评论

          本文标题:函数声明以及函数表达式区别

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