[面试]函数有几种创建方式

119 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

前言

起因:在面试中,面试官突然问了我这样一个问题:在js中函数有几种创建方式?

我在大脑中快速回忆了一下,脑子中好像也没有梳理过这一个知识点,于是我就自己想了想,说了new一个,箭头函数什么的,说的没有逻辑,结束之后,决定好好复盘一下这个问题,希望也能给大家一点启示

函数声明

最常见到的声明方式,使用function声明函数

function 函数名() {
    // 函数体
}

匿名函数表达式

创建一个变量,变量的内容是一个函数,但是创建的函数没有函数名

let fn = function () {
    // 函数体
}

具名函数表达式

相比于匿名函数,不同的是函数是有函数名的

let fn = function myFun() {
    // 函数体
}

构造函数(函数对象方式)(不推荐)

使用JS中内置的Function()来构造一个新的函数,但是不太推荐使用这种方式,因为这种方式需要两次解析,第一次解析常规js代码,第二次需要解析传入构造函数中的代码,比较影响性能

    let fn = new Function("参数1","参数2",...,"函数体")
    

使用箭头函数

使用ES6中的箭头函数,需要注意的是箭头函数的多种写法。

  1. 一个参数的时候,可以省略小括号 x => {} (func4)

  2. 如果多于一个,必须使用小括号包裹 (func3)

  3. 如果执行程序只有一句代码,可以省略花括号(func5)

  4. 箭头函数中没有arguments对象

  5. 不能通过call apply bind改变this的指向

  6. (this的指向问题,在哪里定义函数,this指向谁,父执行上下文)

    let fn = () => {}

总结

  1. 函数声明
  2. 匿名函数表达式
  3. 具名函数表达式
  4. 构造函数(不推荐)
  5. 箭头函数

希望大家要注重平时的积累,有时候不是什么打的知识点困住了你,反而是那些最基础的知识点,比如html,css,js这老三样,可能才是困住你的地方。千万不能忽略了基础的知识点。

如果还有更多的方式和相关的知识,欢迎补充