上一节我们详细介绍了JS函数相关的基础知识,本节我们将更加详细地介绍JS函数,进入函数表达式的学习。什么是函数表达式?就像简单的变量赋值一样,我们把函数当作“值”一样赋值给变量,让变量不再拘泥于数据存储,反而使得变量具有函数的功能。

/*这里使得变量f具有函数的功能*/
 const f = function(a,b){return a+b}
console.log(f(0,1));//打印1

对比普通声明函数(直接使用function声明),我们就像是用一个变量来替代函数名一样,有种“换汤不换药”的感觉。

当然,函数表达式和普通函数也是有不同的区别的,我们先看一下这个例子:

console.log(f(0,1));
  console.log(F(0,1));//这里会报错,不认识F这个变量
  
function f(a,b){
  return a+b
}
const F = function(a,b){return a+b}
/*控制台输出一个1*/

对于普通声明的函数,它会进行函数提升,可以在声明前调用;而对于函数表达式来说,它遵循变量的作用域规则,必须在声明之后才能调用。

对于函数表达式来说,也能够进行递归调用:

/* 函数表达式的递归调用 */
//比如这里找1-n以内的奇数
const arr=[]//存数
const f = function(n){
  if(n==0)return
  if(n%2!=0)arr.push(n)
  f(n-1)
}
f(10),console.log(arr);//打印数组[9,7,5,3,1]

函数表达式和闭包:

/* 函数表达式和闭包 */
/*闭包保持变量的静态效果,导致第二次打印不是1,而是2*/
function f(){
  let n=0
  return function(){
    return ++n
  }
}
const F=f()
console.log(F());//1
console.log(F());//2

总结:本节我们主要讲了JS中函数的其他创建方式——函数表达式,函数表达式只有在创建之后调用才能被识别,不像普通函数一样是全局作用域;同时,函数表达式能够进行递归,是创建闭包环境的基础。

点赞(114)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)