究竟什么是函数值?

时间:2016-09-16 21:27:09

标签: javascript function ecmascript-5

在JavaScript(ECMAScript 5)中,函数被重视(它们被称为"一流的函数")。

这允许我们将它们用作表达式(表达式是产生值的所有东西,并且可以包含其他表达式:var exp0 = (exp1) + exp2 - exp3.function();是一个语法正确的语句)。

在上面的代码中,有8个表达式:exp0,exp1,(exp1),exp2,(exp1)+ exp2,exp3,exp3.function()和(exp1)+ exp2 - exp3.function()。< / p>

因为函数可以用作表达式,所以以下代码是正确的:

var my_function_0 = function a() {}是一个命名函数表达式。

以下代码也是正确的:

var my_function_1 = function() {}`是一个匿名函数表达式。

两者都有价值,都是价值观。

现在,请考虑以下代码:

function requiredIdentifier() {}

它不是&#34;命名或匿名函数表达式&#34;,而是函数声明。

我的问题是:

声明的函数是否有/产生值?

这个问题等同于这个问题: 声明的函数是表达式吗?(即使它不是命名或匿名函数表达式?!)

3 个答案:

答案 0 :(得分:4)

  

声明的函数是否有/产生值?

是。无论使用什么语法创建函数,函数都是可调用对象(即它实现了一个可调用的内部接口):

function a() {}
var b = function() {}
var c = (new Function()) // or some other expression that returns a function

所有变量abc都包含一个函数值。

语法之间的区别仅在于创建值以及是否/何时绑定到变量时。有关这些详细信息,请参阅var functionName = function() {} vs function functionName() {}

答案 1 :(得分:2)

函数声明是一个语句,而不是表达式。由于语句不能在表达式中使用,因此无需考虑其值是什么,因为无法使用该值。

但是,函数声明的语法与命名函数表达式的语法相同。因此,如果您在需要表达式的任何地方使用它,它将被视为命名函数表达式,值将是函数。

例如:

(function requiredIdentifier() {})

是括号表达式,包含命名函数表达式,而不是函数声明。它的值是定义的函数。

答案 2 :(得分:0)

如果您运行函数requiredIdentifier(),则返回值为undefined,而undefined实际上是javascript(ecma脚本)中的原始数据类型。