函数声明?函数表达式?我该怎么选?!

咱们在平常开发中常常使用函数,聪明的你确定已经用的炉火纯青了。function doStuff(){}()=> {}是咱们成天输入的字符。但它们有何不一样,为何使用另外一个呢?前端

*注:咱们这里用的例子都是JavaScriptbash

第一个不一样:名称

当你用一个名称建立函数时,这是一个函数声明。在函数表达式中能够省略该名称,使该函数“匿名”。函数

函数声明:

function doStuff() {};学习

函数函数表达式:

const doStuff = function() {}spa

平常中咱们常常使用ES6建立函数表达式3d

const doStuff = ()={}code

第二个不一样:提高

提高是指函数和变量的提高,变量声明和函数声明提高至当前做用域的顶端,而后进行接下来的处理。cdn

函数声明会被提高但函数表达式不会。

咱们能够经过例子来加深理解:视频

//函数声明
doStuff();
function doStuff() { console.log('haha')};
复制代码

结果: blog

看出来没有任何问题。

看下一个例子

//函数表达式
doStuff();
const doStuff = () => {console.log('haha')};
复制代码

看,这就报错了。

函数表达式实际解析的过程是这样的:

const doStuff;
doStuff();
doStuff = () => {console.log('haha')};
复制代码

注:函数声明提高的优先级比变量提高高。

使用函数表达式的状况:

经过上面两个例子,看起来函数声明在提高方面比函数表达式有用的多。可是在他们两个之间选择的时候应该如何抉择呢?

调用函数表达式能够避免污染全局环境,由于你不知道你的程序有多少不一样的函数,若是你使用函数表达式可能就会覆盖了别人的函数,采用函数表达式,就会避免这些问题。

当即执行函数(IIFE)

IIFE - 当即调用函数表达式 - 就是字面意思。在建立函数后当即调用函数,使用IIFE,以下所示:

(function() => {})()
//或者
(() => {})()
复制代码

回调(callback)

传递给另外一个函数的函数一般在JavaScript中称为“回调”。,以下所示:

function mapAction(item) {
  // do stuff to an item
}
array.map(mapAction)
复制代码

这里的问题是mapAction可用于整个应用程序- 其实没有必要。若是该回调是一个函数表达式,它在函数外就不可用了:

array.map(item => { //do stuff to an item })
//或者
const mapAction = function(item) {
  // do stuff to an item
}
array.map(mapAction)
复制代码

虽然mapAction函数只有在他初始化以后才能使用

总结

简而言之,若是要在全局范围内建立函数并在整个代码中使用它,请使用函数声明。

使用函数表达式来限制函数的可用位置,保持全局环境的整洁干净。 ————————————————————————————————————————————————

放学别走!长按二维码关注 【技术人生路】,无偿免费获取前端学习进阶资料,培训实战视频,就业指导等众多福利哦。我相信咱们都是爱学习爱进步的呀!

相关文章
相关标签/搜索