在 JavaScript (ECMAScript 5) 中,函数是有值(value)的(它们被称为“一流函数”)。
这允许我们将它们用作表达式(表达式是产生值的所有内容,并且可以包含其他表达式:var exp0 = (exp1) + exp2 - exp3.function();
是语法正确的陈述)。
在上面的代码中,有 8 个表达式:exp0、exp1、(exp1)、exp2、(exp1) + exp2、exp3、exp3.function() 和 (exp1) + exp2 - exp3.function()。
<小时/>因为函数可以用作表达式,所以以下代码是正确的:
var my_function_0 = function a() {}
是一个命名函数表达式。
下面的代码也是正确的:
var my_function_1 = function()
{}` 是一个匿名函数表达式。
两者都很有值(value),都是值(value)观。
<小时/>现在,考虑下面的代码:
函数 requiredIdentifier() {}
它不是“命名或匿名函数表达式”,而是函数声明。
<小时/>我的问题是:
声明的函数是否具有/产生值?
这个问题与这个问题等效: 声明的函数是表达式吗?(即使它不是命名或匿名函数表达式?!)
最佳答案
Does a declared function have/produce a value?
是的。无论使用什么语法来创建函数,函数都是一个可调用对象(即它实现了一个使其可调用的内部接口(interface)):
function a() {}
var b = function() {}
var c = (new Function()) // or some other expression that returns a function
所有变量a
、b
和c
都保存一个函数值。
语法之间的区别仅在于何时创建值以及是否/何时将其绑定(bind)到变量。请参阅var functionName = function() {} vs function functionName() {}了解这些详细信息。
关于javascript - 函数值到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39540317/