• JavaScript的函数申明、函数表达式、箭头函数


    JavaScript中的函数可以通过几种方式创建,如下。

    // 函数声明
    function getName() {
      return 'Michael'
    }
    
    // 函数表达式
    const getName = function() {
      return 'Michael'
    }
    
    // 箭头函数(同样也是表达式)
    const getName = () => {
      return 'Michael'
    }

    函数声明和表达式之间的差别是

    JavaScript 解释器中存在一种变量声明被提升的机制,也就是说函数声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面。
    而用函数表达式创建的函数是在运行时进行赋值,且要等到表达式赋值完成后才能调用
    看一个例子

    getName()//oaoafly
    var getName = function() {
      console.log('wscat')
    }
    getName()//wscat
    function getName() {
      console.log('oaoafly')
    }
    getName()//wscat

    上面的问题可以分解成两个简单的问题,有助于你更清楚的看出函数声明和表达式之间的区别

    var getName;
    console.log(getName)//undefined
    getName()//Uncaught TypeError: getName is not a function
    var getName = function() {
      console.log('wscat')
    }
    
    var getName;
    console.log(getName)//function getName() {console.log('oaoafly')}
    getName()//oaoafly
    function getName() {
      console.log('oaoafly')
    }

    这个区别看似微不足道,但在某些情况下确实是一个难以察觉并且“致命“的陷阱。出现这个陷阱的本质原因体现在这两种类型在函数提升和运行时机(解析时/运行时)上的差异。

    箭头函数
    箭头函数是语法和函数表达式比起来稍有不同的函数表达式。在上面的示例中,你可以看到箭头函数看起来像函数表达式,但没有单词function,然后在括号和大括号之间带有粗箭头=>。

    你可能听说过,在JavaScript中,函数会创建自己的作用域。这意味着JavaScript函数会创建自己的上下文this,如果我们需要一个函数但是这个函数却没有自己的上下this,那么就可能会遇到问题。箭头函数的特征之一是它们不创建上下文,因此箭头函数的内部this与外部的this相同。

    箭头函数也可以很小巧。查看下面两个完全相同的示例:

    const getName = () => {
      return 'Michael'
    }

    // 和上面的相同,但是更小巧
    const getName = () => 'Michael'

    当箭头函数忽略其大括号时,表示我们希望粗箭头右侧的内容为返回值(不用加return)。这称为隐式返回值。关于箭头函数,还有一些更细微的细节需要了解,例如如何返回对象以及如何省略单个参数的括号。

    // 箭头函数直接返回对象
    const getStudent = () => ({ name: 'Michael', age: 18, });
    
    // 省略单个参数的括号
    const addOne = (n) => n+1;
    const addOne = n => n+1;
     
    

      



  • 相关阅读:
    FluentValidation 验证框架笔记1
    AutoMapper 笔记1
    MediatR框架笔记1
    vscode调试python时提示无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的解决方法
    Selenium使用自带浏览器自动化
    Selenium启动Chrome插件(Chrome Extensions)
    Gitee,Github 图片转直链
    CentOS 7.3 修改root密码 passwd: Authentication token manipulation error
    阿里云服务器 被入侵植入dhpcd导致cpu飙升100%问题
    Github 切换分支
  • 原文地址:https://www.cnblogs.com/insightz/p/11995078.html
Copyright © 2020-2023  润新知