咱们在平常开发中常常使用函数,聪明的你确定已经用的炉火纯青了。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,以下所示:
(function() => {})()
//或者
(() => {})()
复制代码
传递给另外一个函数的函数一般在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
函数只有在他初始化以后才能使用
简而言之,若是要在全局范围内建立函数并在整个代码中使用它,请使用函数声明。
使用函数表达式来限制函数的可用位置,保持全局环境的整洁干净。 ————————————————————————————————————————————————
放学别走!长按二维码关注 【技术人生路】,无偿免费获取前端学习进阶资料,培训实战视频,就业指导等众多福利哦。我相信咱们都是爱学习爱进步的呀!