开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
前言
起因:在面试中,面试官突然问了我这样一个问题:在js中函数有几种创建方式?
我在大脑中快速回忆了一下,脑子中好像也没有梳理过这一个知识点,于是我就自己想了想,说了new一个,箭头函数什么的,说的没有逻辑,结束之后,决定好好复盘一下这个问题,希望也能给大家一点启示
函数声明
最常见到的声明方式,使用function声明函数
function 函数名() {
// 函数体
}
匿名函数表达式
创建一个变量,变量的内容是一个函数,但是创建的函数没有函数名
let fn = function () {
// 函数体
}
具名函数表达式
相比于匿名函数,不同的是函数是有函数名的
let fn = function myFun() {
// 函数体
}
构造函数(函数对象方式)(不推荐)
使用JS中内置的Function()来构造一个新的函数,但是不太推荐使用这种方式,因为这种方式需要两次解析,第一次解析常规js代码,第二次需要解析传入构造函数中的代码,比较影响性能
let fn = new Function("参数1","参数2",...,"函数体")
使用箭头函数
使用ES6中的箭头函数,需要注意的是箭头函数的多种写法。
-
一个参数的时候,可以省略小括号 x => {} (func4)
-
如果多于一个,必须使用小括号包裹 (func3)
-
如果执行程序只有一句代码,可以省略花括号(func5)
-
箭头函数中没有arguments对象
-
不能通过call apply bind改变this的指向
-
(this的指向问题,在哪里定义函数,this指向谁,父执行上下文)
let fn = () => {}
总结
- 函数声明
- 匿名函数表达式
- 具名函数表达式
- 构造函数(不推荐)
- 箭头函数
希望大家要注重平时的积累,有时候不是什么打的知识点困住了你,反而是那些最基础的知识点,比如html,css,js这老三样,可能才是困住你的地方。千万不能忽略了基础的知识点。
如果还有更多的方式和相关的知识,欢迎补充