在学习javascript时,我遇到了函数语句和函数表达式。
function fun(){} // function statement
var fun = function() {} //function expression
然后我将这个例子解释为函数表达式。
(function() {
alert("I am a function");
}());
这真的是一个函数表达式吗?它对我来说似乎是一个功能声明 如
function() {
alert("I am not a function statement.");
};
答案 0 :(得分:2)
将括号中的函数包装成一个表达式。
这是因为在JavaScript中括号不能包含语句,因此引擎知道将封闭的函数解析为表达式。
如果您使用仅对表达式进行操作的任何其他操作,则情况也是如此:
(function () {}());
!function () {}();
+function () {}();
~function () {}();
void function () {}();
答案 1 :(得分:0)
下面的代码是function expression
:因为名称完全使用关键字expression
,这意味着它是一个值。如果它只是一个表达式,它将保持一个值,并且可以作为任何其他值传递,即string
number
boolean
。但是,如果它作为参考存储在变量中,它将变为statement or declaration
。继续阅读。
function () { }
您还可以为函数表达式指定名称并将其转换为named function expression
:
function foo() { }
函数名称(上面的foo)仅存在于函数内部,例如,可用于自递归:
Function declaration
或语句,即它将值存储在引用变量中,此处引用变量为
var fac = function me(x) { return x <= 1 ? 1 : x * me(x-1) }
fac(10)
3628800
console.log(me)
ReferenceError: me is not defined
命名函数表达式与函数声明(大致是语句)无法区分。但它们的效果是不同的:函数表达式产生一个值(函数)。函数声明导致一个动作 - 创建一个值为函数的变量。此外,只能立即调用函数表达式,而不能调用函数声明。
学分:@rauschmasource-url:Expression vs Statements