为何JavaScript中可存储于变量的函数被称为函数表达式?
为什么存储在变量中的函数被称为函数表达式?
你猜的没错——函数本身就是那个表达式求值后得到的值。
在JavaScript里,表达式的核心是“能产生一个值”,这个值不一定是数字、字符串这类原始值,也可以是对象,而函数在JS里本质就是一种特殊的对象(函数对象)。
拿你给出的代码举例:
const calcAge = function (birthYear) { return 2037 - birthYear; };
这里等号右侧的function (birthYear) {...}就是一个函数表达式,它在代码执行时会被求值,最终得到的就是这个函数本身(一个函数对象)。然后这个函数对象被赋值给了变量calcAge。
你混淆的地方在于把“函数调用的结果”和“函数表达式的求值结果”搞混了:
- 函数表达式的求值结果是函数对象,这是表达式直接产生的值;
- 而
calcAge(1995)这种函数调用是另一个表达式,它的求值结果才是函数执行后返回的数值(比如42)。
再换个角度对比:函数声明是语句,它不会产生值,只是定义一个函数;但函数表达式是表达式,它的存在就是为了生成一个函数值,这个值可以被存储、传递(比如作为参数传给其他函数),这也是JS里“函数是一等公民”的体现。
内容的提问来源于stack exchange,提问作者Cristian Lopez
相关产品推荐
相关产品推荐

